C ++ 2重载具有类似的转换

时间:2013-01-14 07:49:12

标签: c++ operator-overloading

我正在为基本类型编写包装类,因此可以键入它们......除了我遇到了问题。我需要这两种方法才能让它变得更好:

Integer32(FastInteger32 value);
Boolean operator>(Integer32 value);
operator FastInteger32();

除非我去使用'>'在'FastInteger'和'Integer'之间的运算符,编译器看到两个可能的路径,而不只是选择一个,它会爆炸。有没有办法告诉它只选一个?

整个代码:

typedef unsigned int FastInteger32;

class Integer32
{
public:
    Integer32(FastInteger32 value);
    Boolean operator>(Integer32 value);
    operator FastInteger32();
private:
    FastInteger32 value;
};

int main()
{
    Integer32 a = 5;
    FastInteger32 b = 5;
    if (a < b) { }  // Doesn't know what to do here, convert b to Integer32 and compare or convert a to FastInteger32 and compare
}

你们一路摇滚,谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

问题在于你的构造函数(Integer32(FastInteger32 value);)。单个参数构造函数应该(几乎)始终声明为explicit。只需将声明更改为explicit Integer32(FastInteger32 value);;定义不应该改变。

答案 1 :(得分:1)

C ++总是更喜欢没有转换的重载。因此,添加bool operator<(FastInteger32, Integer32)bool operator<(Integer32, FastInteger32)将消除所有歧义。