如何解决使一个用户定义的转换功能优于另一个
我正在尝试编写一个简单的类,该类在需要保证复数的上下文中使用时将充当complex<double>
号,否则将充当double
(要求这样使用时,虚部必须为0)
这是我到目前为止所拥有的:
class Sample
{
public:
Sample() {}
Sample(double real) : m_data(real) {}
Sample(double real,double imaginary) : m_data(real,imaginary) {}
operator std::complex<double>() const
{
return m_data;
}
operator double() const
{
assert(m_data.imag() == 0.0);
return m_data.real();
}
private:
std::complex<double> m_data;
};
这在大多数情况下都非常有效。每当将此类传递给需要复数的函数时,它将像是复数一样工作。每当将其传递给期望加倍的函数时,它的行为就好像是加倍一样。
当我将其传递给将同时接受复数和双精度的函数时,就会出现问题。 (例如std::arg
)。当我尝试将Sample
对象传递给std::arg
时,由于两种方法在技术上都是有效的,因此它不知道使用哪种转换。
在这种情况下,我希望complex
转换是“首选”的,并将其作为复杂的形式传递。当两种转换在技术上都可以接受时,有什么方法可以使一个用户定义的功能比另一个功能更受欢迎?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。