std :: vector作为模板参数...所有地狱都松了

时间:2013-04-26 21:06:39

标签: c++

我很快就会爆炸......有人请指出目前在这里出了什么问题:

template <typename TType, template <typename ...> class Container, class Comparer>
Container<TType>* sort(const Container<TType>& container) {
    ...
}

当我尝试使用std :: vector作为其Container参数调用此函数时出现问题。我收到以下错误:

main.cpp:24:34: error: no matching function for call to 'func()'
main.cpp:24:34: note: candidate is:
main.cpp:14:6: note: template<class T, template<class ...> class Container> void func()
main.cpp:14:6: note:   template argument deduction/substitution failed:

以下是我试图称之为:

std::vector<int>* m(sort<int, std::vector<int>, Comparer>(m));

当我从它运行的函数中删除模板模板参数时,但没有使用它......我正在使用MinGW附带的最新g ++编译器。 IDE是NetBeans 7.3,不应该影响太多。编译器参数是:

-std=c++11 -Wall -pedantic

感谢您的帮助,   - 乔伊

1 个答案:

答案 0 :(得分:10)

您应该提供模板,而不是从模板创建的特定类型。正确的电话会是:

sort<int, std::vector, Comparer>(m)

请注意,sort本身正在为Container提供模板参数,如const Container<TType>&中所示。明确将Container设置为std::vector<int>毫无意义;您要求编译器执行std::vector<int><int>

之类的操作