【发布时间】:2013-12-24 07:28:07
【问题描述】:
我正在构建一个类,其实例可以表示多种简单的值类型。它的界面大致如下:
class value {
public:
value();
explicit value( double value );
explicit value( bool value );
...
}
我发现我无法按照我希望的方式构造它,因为整数(一个非常常见的用例)在 bool 和 double 之间被认为是不明确的。
value bool_value( true ); // OK
value pi_approx( 3.14159 ); // OK
value int_value( 42 ); // ERROR: ambiguous constructor
有什么方法可以在不要求调用者对数值使用小数点或使用显式“make”静态函数的情况下完成这项工作?
[编辑]:此类表示来自 JSON 解析树的值,因此 bool 和 number 之间的区别很重要,必须保留。
【问题讨论】:
-
您是否有理由不希望有一个构造函数接受
int而只是委托给接受double的构造函数? -
参见上面的编辑:bool 和 number 之间的区别很重要,必须保留。
-
我不确定您编辑的目的是什么。我认为布尔值和数字之间的区别已经很明显了,没有人提出其他建议。
-
@ruakh:我原本以为有人建议 bool 可以折叠成一个数字而不会失去语义。
标签: c++ constructor overloading