隐式转换以匹配运算符参数

时间:2012-11-19 09:20:59

标签: c++ operators operator-overloading type-conversion

我有以下类声明:

class DepthDescriptor
{
public:
    DepthDescriptor(DepthType depth);
    bool operator==(DepthDescriptor& type);
    bool operator>=(DepthDescriptor& type);
    bool operator<=(DepthDescriptor& type);
...
}

为什么以下行不会执行对DepthDescriptor对象的隐式转换,以便进行运算符比较?

if (depth == Depth_8U)
{
...
}

请注意,depthDepthDescriptor个对象,DepthType是枚举,Depth_8U是枚举值之一。我希望像上面那样的行首先调用隐式构造函数DepthDescriptor(DepthType depth)然后调用相应的运算符,但我得到no operator "==" matches these operands

2 个答案:

答案 0 :(得分:1)

尝试

bool operator==(const DepthDescriptor& type) const;
bool operator>=(const DepthDescriptor& type) const;
bool operator<=(const DepthDescriptor& type) const;

答案 1 :(得分:0)

要实现转换,您应该编写全局函数而不是成员函数,并且应该是const-correct。即。

bool operator==(const DepthDescriptor& lhs, const DepthDescriptor& rhs)
{
    ...
}

如果使用成员函数,则左侧不会发生转换。除非你是const-correct,否则转换可能不会发生在符合标准的编译器中。