我正在尝试定义一个带有容器的模板函数,它也是一个模板类型。我需要知道容器的模板类型是什么(E
)(所以我可以在代码中引用它,例如E element = *iterator;
)。这是我的尝试:
template <template <typename E> T>
void sort(T& container){ ... }
我认为这意味着“sort
是一个采用模板参数T
的模板函数。T
是一个采用模板参数E
”的模板类型。 / p>
然而我收到错误:
expected 'class' before T.
当我把'课堂'放在那里时,它说:
variable or field 'sort' declared void
我在语法上做错了什么?
答案 0 :(得分:0)
还有其他方法可以实现相同的功能。您需要的是template template
参数。一个工作的例子是:
template <typename E, template <typename> class T>
void sort(T<E>& container){}
main(){}
在模板签名中,T
被声明为采用另一个类型参数的(依赖)类型。该参数本身(E
)需要声明并提供给T
,就像在vector<int>
中使用一样。
你也可以使用:
template <typename E, template <typename, typename...> class T>
如果您的容器类型需要可选参数,例如traits。