Вы должны определить T
как параметр шаблона шаблона , например,
template<template<typename> class T>
class B {
B() : a(new T<int>), b(new T<char>) {}
T<int>* a;
T<char>* b;
};
Затем вы можете указать другой шаблон класса, например A
, в качестве аргумента шаблона, например B<A> b;
.
Кстати: из C ++ 17 вы также можете использовать ключевое слово typename
для объявления параметров шаблона шаблона. то есть
template<template<typename> typename T>
class B {
B() : a(new T<int>), b(new T<char>) {}
T<int>* a;
T<char>* b;
};