2017-08-11 183 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;