Предположим, у меня есть перечисление, и я хочу, чтобы каждое значение перечисления ассоциировалось с определенным типом. Скажем, стандартный тип double, и если я хочу, чтобы это было чем-то другим, мне нужно явно указать его.Шаблоны типов шаблонов Variadic Разрешение
Q1: Это предпочтительный способ реализовать такую вещь?
enum A {
v1,
v2,
v3
};
// for every value of A, the standard type is double
template<A a>
struct A_info {
typedef double type;
};
// other types for certain values can be specified using specialization
template<>
struct A_info<v2> {
typedef size_t type;
};
Затем предположим, у меня есть некоторые функции шаблона, и я хочу, чтобы вызвать функцию в зависимости от типа, связанного со значением перечисления:
template<typename T>
void foo() { /* do something */ }
template<A a>
void bar() {
foo< typename A_info<a>::type >();
}
Это прекрасно работает. Теперь предположим, я другая функция в зависимости от VARIADIC списка шаблонов, и я хочу сделать что-то подобное, как описано выше ...
template<typename ... T>
void foo_multiple() { /* stuff */ }
template<A ... a>
void bar_multiple() {
foo_multiple< /* ??? */ >();
}
Q2: Как это реализовать? Это возможно, так или иначе?
Первый пример отсутствует 'typename'. –
Исправлено это. Благодаря! – fdlm