我正在为基本类型编写包装器类,这样它们就可以被类型化...除了我遇到了一个问题。我需要这两种方法来使它更好:
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
}顺便说一句,你们太棒了,谢谢你们的帮助!
发布于 2013-01-14 16:34:21
C++总是喜欢没有任何转换的重载。因此,添加bool operator<(FastInteger32, Integer32)和bool operator<(Integer32, FastInteger32)将消除所有歧义。
发布于 2013-01-14 16:31:00
问题出在你的构造函数(Integer32(FastInteger32 value);)上。单参数构造函数应该(几乎)总是声明为explicit。只需将声明更改为explicit Integer32(FastInteger32 value);即可;定义不应更改。
https://stackoverflow.com/questions/14314819
复制相似问题