c++ - 支持两个具有不同语义的整数构造函数

标签 c++ constructor constructor-overloading

我正在设计一个具有两个构造函数的类,这些构造函数具有单独的语义的单个整数参数。

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/

相关文章:

c++ - friend 可以访问 friend 的成员(member),但似乎无法更新 friend 的成员(member)

java - 构造函数和构造函数重载

c++ - 我如何遍历元组

c++从嵌套类方法访问变量

c++ - 防止重新定义构造函数定义的方法

c++ - 当声明/参数相同时如何重载构造函数/函数?

c++ - 单例中的构造函数重载不起作用

c++ - C++ 语言在使用列表初始化时是否强制执行编译器优化?

c++ - Googletest 参数化测试崩溃

java - 是否有 Lombok 方法来初始化从其他字段计算的最终字段?