template<class...>struct types{using type=types;};
template<class T>struct tag{using type=T;};
template<class Tag>using type_t=typename Tag::type;
вышеупомянутые помощники позволяют вам работать с типами как значениями.
class A {
template<class T>
A( tag<T> );
};
тип tag<T>
- это переменная без состояния, кроме типа, который он содержит.Вы можете использовать это, чтобы передать значение чистого типа в функцию шаблона и получить тип, определяемый функцией шаблона:
auto a = A(tag<int>{});
Вы можете передать более одного типа:
class A {
template<class T, class U, class V>
A( types<T,U,V> );
};
auto a = A(types<int,double,std::string>{});