如何使C ++编译时模板转换为常量?

时间:2017-08-11 20:24:56

标签: c++ templates compile-time-constant

这是将默认参数initial_value初始化为TNumber类型的编译时常量的唯一方法吗?如果没有,这样做的首选方法是什么?

template <typename TNumber>
class Widget {
 public:
  Widget(TNumber initial_value = static_cast<TNumber>(1))
    : value_(initial_value) {};

 private:
  TNumber value_;
};

1 个答案:

答案 0 :(得分:1)

首选方法是使用类型的预期构造函数。在C ++ 98中:

Widget(TNumber initial_value = TNumber(1));

在C ++ 11+中,你也可以使用聚合构造函数:

Widget(TNumber initial_value = TNumber{1});

当参数为const ref时,这也适用,如

Widget(const TNumber& initial_value = TNumber{1});

按照惯例,显式默认构造函数为数值返回0,因此以下两行对于标准数值类型(int,char,float等等)是等效的

Widget(const TNumber& initial_value = TNumber{0});

Widget(const TNumber& initial_value = TNumber{});

[编辑]对于复数(std :: complex&lt;&gt;)也是如此。如果您定义自己的“类数”类型,我建议您遵循相同的约定。它可以在某些时候真正节省你的一天。