Параметрезированный typename в шаблоне?
Возможно ли, при объявлении шаблонной функции - указать, что задаваемый typename так же будет параметризован? Например:
template <typename t1, typename t2<T>>
void SomeFunc()
{
t1 var;
t2<T> list;
std::invoke(&t2::insert,list,var)
}
int main()
{
SomeFunc<std::list<std::string>,std::string>();
return 0;
}
Ответы (1 шт):
Автор решения: Swift
→ Ссылка
Это называется шаблонный параметр шаблона (template template parameter).
#include <string>
#include <list>
template <class T1, template<class> class V>
void SomeFunc()
{
V<T1> l;
}
int main()
{
SomeFunc<std::string, std::list>();
return 0;
}
Если аргумент для шаблонного параметра имеет параметры по умолчанию, их придётся учитывать. Например, std::vector на самом деле имеет два параметра-типа.