0

私は現在、テンプレート引数に応じて特殊化する必要があるクラスを作成しています。

数値テンプレート引数が X より大きいかどうかに応じて、特定の特殊化のために特定のメンバー変数を除外して、より正確にすることができるかどうか疑問に思っています。

たとえば、次のようになります。

template<int N>
class Test
{
   int a;
   int b;
}

template<N > X>
class Test
{
  int a;
}

std::conditional の使用を考えていましたが、少なくとも 1 つの型が選択されるようです。もちろん、D-Pointer メソッドと std::conditional を使用して、指定されたさまざまなオブジェクトに特化することもできますが、もっと良い方法があるかどうか疑問に思いました。

私が見る別の方法は、抽象基本クラスを使用し、N < X 用と N >= X 用の 2 つの実装を持つことですが、これがより良いかどうかはわかりません。

4

1 に答える 1

4

SFINAEを使用するだけです。

template<int N, typename = void>
class Test
{
   int a;
   int b;
};

template<int N>
class Test<N, typename std::enable_if<(N > X)>::type>
{
  int a;
};
于 2015-11-30T14:24:41.947 に答える