В настоящее время я пишу класс, который должен специализироваться в зависимости от аргумента шаблона.
Теперь мне интересно, можно ли опустить определенные переменные-члены для конкретных специализаций, чтобы быть более точным в зависимости от того, является ли числовой аргумент шаблона больше, чем X.
Так, например:
template<int N>
class Test
{
int a;
int b;
}
template<N > X>
class Test
{
int a;
}
Я думал об использовании std :: conditional, но похоже, что по крайней мере один тип будет выбран. Конечно, я мог бы использовать метод D-Pointer и std :: conditional и поместить специализацию в различные объекты, на которые указывают, но мне было интересно, есть ли лучший способ.
Альтернатива, которую я вижу, состоит в том, чтобы использовать абстрактный базовый класс и иметь две реализации, одну для 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;
};
Других решений пока нет …