Можно ли исключить переменные-члены шаблона по условиям аргументов шаблона?

В настоящее время я пишу класс, который должен специализироваться в зависимости от аргумента шаблона.

Теперь мне интересно, можно ли опустить определенные переменные-члены для конкретных специализаций, чтобы быть более точным в зависимости от того, является ли числовой аргумент шаблона больше, чем 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, но я не уверен, что это будет лучше.

0

Решение

Просто используйте 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;
};
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]