是否可以根据模板参数的条件排除模板成员变量?

Is it possible to exclude template member variables by conditions on template arguments?

我目前正在编写一个 class,它应该根据模板参数专门化。

我现在想知道是否可以根据数字模板参数是否大于 X 来更准确地省略特定专业化的某些成员变量。

例如:

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

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

我正在考虑使用 std::conditional,但这似乎导致至少选择了一种类型。我当然可以使用 D-Pointer 方法和 std::conditional 并将专业化放入指向的不同对象中,但我想知道是否有更好的方法。

我看到的另一种选择是使用抽象基础 class 并有两个实现,一个用于 N < X,一个用于 N >= X,但我不确定这会更好。

只需使用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;
};