Если вы хотите удобно создать несколько шаблонных классов Foo
, вы можете просто предоставить оболочку для этого:
template<typename ...Ts>
class MultiFoo : public Foo<Ts>... {};
и затем создать несколько шаблонных классов одновременно:
template class MultiFoo<int, double, bool>;
, который будет создавать для вас Foo<int>
, Foo<double>
и Foo<bool>
.
Вот демо 1014 *
Если у вас действительно есть кортеж, то Вы можете предоставить явную специализацию для этого:
template<typename ...>
class MultiFoo;
template<typename ...Ts>
class MultiFoo<tuple<Ts...>> : public Foo<Ts>... {};
и создать несколько Foo
s с помощью:
template class MultiFoo<tuple<int,double, bool>>;
Вот демонстрационная версия , где я добавил свой собственный кортеж, так что вывод на самом деле виден. Это должно работать точно так же для std::tuple
.
Обратите внимание, что если вы хотите явно создавать экземпляры шаблонов, чтобы они были видны в других единицах перевода, вам необходимо использовать ключевое слово extern
для этого. например,
extern template class Foo<int>;
и
extern template class MultiFoo<int, double, bool>;