我目前正在编写一个应该根据模板参数进行专门化的类。
我现在想知道是否可以省略特定专业化的某些成员变量,使其更精确,具体取决于数字模板参数是否大于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但我不确定这会更好。
答案 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;
};