2017-08-11 57 views
1

这是将默认参数initial_value初始化为TNumber类型的编译时间常量的唯一方法吗?如果不是,那么这样做的首选方法是什么?如何使C++编译时间模板转换为常量?

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

private: 
    TNumber value_; 
}; 

回答

1

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

Widget(TNumber initial_value = TNumber(1)); 

在C++ 11+,你可以使用聚合的构造以及:

Widget(TNumber initial_value = TNumber{1}); 

这也适用于你的参数是一个const参考,如

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 <>)也是如此。如果您定义了自己的“类似数字”类型,我建议您遵循相同的约定。它可以真正节省你的一天的时间。

+0

太好了,谢谢! – Roman

0

你可以在模板类型中使用默认成员初始化吗?所以,只是...

私有: TNumber value_ = 1;