2017-08-11 10 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で
Widget(TNumber initial_value = TNumber(1)); 

11+あなたにも集計コンストラクタを使用することができます:C++ 98では

Widget(TNumber initial_value = TNumber{1}); 

をお使いのパラメータがconstの参照であるとき、これがまた

Widget(const TNumber& initial_value = TNumber{1}); 
のように、作品

慣例により、明示的なデフォルトのコンストラクタは数値に対して0を返します。したがって、2つの次の行は標準の数値型(int、char、floatなど)と等価です。

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

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

[編集]複素数も同様です(std :: complex <>)。自分の「数字のような」タイプを定義した場合、同じコンベンションに従うことをお勧めします。それは本当にあなたの日をある時点で救うことができます。

+0

よろしくお願いいたします。 – Roman

0

テンプレートタイプでデフォルトのメンバー初期化を使用できますか?だから...

プライベート: TNumber value_ = 1;

関連する問題