尝试定义采用模板参数的模板函数

时间:2014-10-12 14:08:48

标签: c++ templates syntax

我正在尝试定义一个带有容器的模板函数,它也是一个模板类型。我需要知道容器的模板类型是什么(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

我在语法上做错了什么?

1 个答案:

答案 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。

相关问题