我正在设计一个具有两个构造函数的类,这些构造函数具有单独的语义的单个整数参数。
template <typename value_t>
class Numeric {
value_t value_;
public:
Numeric(value_t value) : value_(value) {}
Numeric(long l) { /* computes value_ from l */ }
Numeric(double d) { /* computes value_ from d */ }
Numeric(std::string bstring) { /* computes value_ from binary string */ }
// ...
};
value_t
必须 在这种情况下是一个整数类型,它甚至可以是 long
的别名(在这种情况下这不会甚至编译)。即使它不是 long
的类型别名,我也不确定整数提升会如何混淆两个构造函数。
我的想法是,我想通过提供底层表示来支持用户构建,或通过提供任何可能的数字表示,然后将其转换为底层表示(A.K.A value_t
)。
隔离构造函数的最佳方法是什么?
最佳答案
我强烈建议您重新考虑设计。为什么需要两个看起来相同但做两件不同事情的构造函数?
无论如何,你可以使用标签:
struct tag_a{};
struct tag_b{};
template <typename value_t>
class Example {
value_t value_;
public:
Example(value_t value, tag_a) : value_(value) {}
Example(long l, tag_b) { }
};
用法
long x = 123;
auto a = Example<long>(x,tag_a());
auto b = Example<long>(x,tag_b());
关于c++ - 支持两个具有不同语义的整数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449891/