是否可以根据模板参数的条件排除模板成员变量?
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;
};
我目前正在编写一个 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;
};