C ++, шаблонная спецификация шаблона

У меня есть шаблон, который не реализует два метода.

Я хочу использовать только те классы, которые являются спецификациями шаблона, для тех, что я предоставляю спецификацию.

Пример:

template<class T> class Temp
{
void Method1();
};

Temp<int>::method1() {...}

Теперь я хочу предоставить тип шаблона для спецификации, как

template<class General> void Temp<General> method1() {...}

И я укажу, какие типы являются General,

Как я могу сделать это с помощью синтаксиса C ++?

0

Решение

Кажется, вы хотите предоставить кучу специализаций для списка известных типов. Для этого вы можете использовать SFINAE (например, std::enable_if) и некоторые шаблоны метапрограммирования.

Чтобы дать вам идею:

#include <type_traits>

template <class T, class... Candidates>
struct is_one_of;

/* alternative 1 - too complicated
template <class T, class Head, class... Tail>
struct is_one_of<T, Head, Tail...>
: std::integral_constant<bool, std::is_same<T, Head>::value || is_one_of<T, Tail...>::value>
{}; */

/* better alternative - thanks, Dan */
template <class T, class Head, class... Tail>
struct is_one_of<T, Head, Tail...> : is_one_of<T, Tail...> {}

template <class T, class... Tail>
struct is_one_of<T, T, Tail...> : std::true_type {}

/* needed for both alternatives */
template <class T>
struct is_one_of<T> : std::false_type {};

Сейчас enable_if ваши специализации в зависимости от is_one_of<T, ?your-list-of-General-types-here?>

1

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

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

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