Параметры шаблона шаблона без указания внутреннего типа
Я хочу знать, возможно ли вообще иметь код, который имеет следующее поведение:
int main()
{
func<vector>(/*some arguments*/);
}
То есть, я хочу, чтобы пользователь мог указать контейнер без указания типа, в котором он работает.
Например, некоторый (мета) код (который не работает с указанным выше), который может определить func
, будет следующим:
template<typename ContainerType>
int func(/*some parameters*/)
{
ContainerType<int> some_container;
/*
operate on some_container here
*/
return find_value(some_container);
}
Ответы
Ответ 1
Синтаксис
template <template <typename...> class ContainerType>
int func(/*some parameters*/)
{
// Your code with ContainerType<int>
}
Примечание: class
не может быть заменено на typename
(до С++ 17).
Вы не можете просто использовать typename
вместо typename...
Потому что std::vector
принимает Type и Allocator (по умолчанию): std::vector<T, Allocator>
Ответ 2
Попробуйте следующее:
template<template<typename,typename> class ContainerType>
int func (/*some parameters*/)
{
}
Вам нужны два внутренних параметра шаблона, поскольку std::vector
определяется как:
template < class T, class Alloc = allocator<T> > class vector;