1

我正在为基本类型编写包装类,以便可以输入它们......除非我遇到了问题。我需要这两种方法来使它变得更好:

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
}

顺便说一句,你们摇滚,谢谢你的帮助!

4

2 回答 2

1

问题在于您的构造函数(Integer32(FastInteger32 value);)。单参数构造函数应该(几乎)总是被声明为explicit. 只需将声明更改为explicit Integer32(FastInteger32 value);; 定义不应改变。

于 2013-01-14T08:31:00.263 回答
1

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

于 2013-01-14T08:34:20.930 回答