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

时间:2015-11-30 14:22:15

标签: c++ templates conditional opaque-pointers

我目前正在编写一个应该根据模板参数进行专门化的类。

我现在想知道是否可以省略特定专业化的某些成员变量,使其更精确,具体取决于数字模板参数是否大于X.

例如:

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

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

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

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

1 个答案:

答案 0 :(得分: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;
};