【发布时间】:2017-04-10 20:40:15
【问题描述】:
我有一个名为 uniVal 的类,它定义了到 int_64 double 和 string 的转换。当我尝试将此类的对象与 int GCC 进行比较时说: 候选人是:
operator==(int, int) <built-in>
operator==(int64_t {aka long int}, int) <built-in>
operator==(unsigned int, int) <built-in>
operator==(long unsigned int, int) <built-in>
operator==(float, int) <built-in>
operator==(double, int) <built-in>
error: ambiguous overload for ‘operator==’ (operand types are ‘uniVal’ and ‘int’)
但如果我指定强制转换为双精度,则它会编译。是否可以让 gcc 选择最接近其他参数类型的转换类型?
更新: 为每种类型组合编写自己的 operator== 当然可以解决这个问题,但是我希望这个类能够与所有 c++ 类型一起工作,所以我只想编写一堆转换函数,让编译器完成剩下的工作。
【问题讨论】:
-
如果你自己写了
operator==(uniVal, int)和operator==(int, uniVal),那应该可以解决问题