Это то, что вам нужно:
#include <vector>
template <typename T, template<typename, typename> class C>
class TSContainer
{
C<T, std::allocator<T> > container;
};
int main() {
TSContainer<int, std::vector> a;
}
Обратите внимание, что std::vector
принимает два параметра шаблона, второй по умолчанию равен std::allocator
. В качестве альтернативы вы можете написать:
#include <vector>
template <typename T, template<typename, typename = std::allocator<T> > class C>
class TSContainer
{
C<T> container;
};
int main() {
TSContainer<int, std::vector> a;
}
Оба из них навязывают вам выбор распределителя. Если вы хотите контролировать, какой распределитель используется вашим вектором (то есть то, что используется в качестве второго параметра шаблона для C
), вы также можете использовать это:
#include <vector>
template <typename T, template<typename, typename> class C, typename A = std::allocator<T> >
class TSContainer
{
C<T, A> container;
};
int main() {
TSContainer<int, std::vector> a;
}
Это наиболее гибкое решение.