2016-09-01 7 views
0

constexpr変数または::std::integral_constant<>という数値定数を使用するかどうか疑問に思っていますか?例:静的constexprの変数はどこか.cppファイル内の定義が必要になることがありますので、コンテナ内の型または変数としての数値定数?

template <typename T> 
struct container 
{ 
    static constexpr ::std::size_t const size = 16; 
}; 

template <typename T> 
struct container 
{ 
    using size = ::std::integral_constant<::std::size_t, 16>; 
}; 

私は::std::integral_constantアプローチの方がより傾きます。

+0

注: 'std'という名前空間は予約されているため、 ':: std'は必要ありません。 –

+0

少ない方が良いです。 'std :: integral_constant'を使わないでください。 –

+0

'std :: integral_constant'(値にアクセスするために使用する必要がある)の' value'メンバは静的constexprです。だから私の意見では、あなたがしたいことについては、 'std :: integral_constant'は' constexpr'を作成するための長い道のりです。 –

答えて

2

私は個人的には、最良の選択肢は昔ながらの列挙型だと信じています。 constexprはODRを使用する傾向があり、integral_constantはあまり入力していません(コードの後半に必要な場合はいつでも作成できます)。

+0

または、最近ではenumクラスです。 – user1095108

+0

@ user1095108、私はそうは思わない。 enumがクラス内の整数定数として使用されるとき、enumクラスはクラッタを追加するだけです。 – SergeyA

+0

素敵な小さな例を教えてください。 – user1095108

関連する問題