我正在为基本类型编写包装类,因此可以键入它们......除了我遇到了问题。我需要这两种方法才能让它变得更好:
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
}
你们一路摇滚,谢谢你的帮助!
答案 0 :(得分:1)
问题在于你的构造函数(Integer32(FastInteger32 value);
)。单个参数构造函数应该(几乎)始终声明为explicit
。只需将声明更改为explicit Integer32(FastInteger32 value);
;定义不应该改变。
答案 1 :(得分:1)
C ++总是更喜欢没有转换的重载。因此,添加bool operator<(FastInteger32, Integer32)
和bool operator<(Integer32, FastInteger32)
将消除所有歧义。