5

テンプレートタイプを特定のサイズの可変タイプに制限することは可能かどうか疑問に思いましたか?sizeof(int)== 4およびsizeof(bool)== 1であるコンパイラでこのコードを実行する場合、4バイトの変数を受け入れ、他のすべてを拒否するとします。

template <class T> FourOnly {...};
FourOnly<int> myInt; // this should compile
FourOnly<bool> myBool; // this should fail at compilation time

何か案が?ありがとう!

4

2 に答える 2

10

静的アサーションを使用できます。

template <class T> FourOnly 
{
  static_assert(sizeof(T)==4, "T is not 4 bytes");
};

関連するC++11サポートがない場合は、boost.StaticAssertを参照してください。

于 2013-03-19T15:25:31.640 に答える
3

std::enable_ifが4でない場合は、コンパイルを禁止するために使用できますsizeof(T)

template<typename T,
         typename _ = typename std::enable_if<sizeof(T)==4>::type
        >
struct Four
{};

しかし、私は他の答えstatic_assertの解決策を好みます。

于 2013-03-19T15:28:29.430 に答える