首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ 2重载具有类似的转换

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

Stack Overflow用户
提问于 2013-01-14 15:49:12
回答 2查看 1.6K关注 0票数 1

我正在为基本类型编写包装器类,这样它们就可以被类型化...除了我遇到了一个问题。我需要这两种方法来使它更好:

代码语言:javascript
运行
复制
Integer32(FastInteger32 value);
Boolean operator>(Integer32 value);
operator FastInteger32();

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

完整的代码:

代码语言:javascript
运行
复制
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
}

顺便说一句,你们太棒了,谢谢你们的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-14 16:34:21

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

票数 1
EN

Stack Overflow用户

发布于 2013-01-14 16:31:00

问题出在你的构造函数(Integer32(FastInteger32 value);)上。单参数构造函数应该(几乎)总是声明为explicit。只需将声明更改为explicit Integer32(FastInteger32 value);即可;定义不应更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14314819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档