我很快就会爆炸......有人请指出目前在这里出了什么问题:
template <typename TType, template <typename ...> class Container, class Comparer>
Container<TType>* sort(const Container<TType>& container) {
...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用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:
Run Code Online (Sandbox Code Playgroud)
以下是我试图称之为:
std::vector<int>* m(sort<int, std::vector<int>, Comparer>(m));
Run Code Online (Sandbox Code Playgroud)
当我从它运行的函数中删除模板模板参数时,但没有它...我正在使用MinGW附带的最新g ++编译器.IDE是NetBeans 7.3,不应该影响太多.编译器参数是:
-std=c++11 -Wall -pedantic
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助, - 乔伊
Ben*_*igt 10
您应该提供模板,而不是从模板创建的特定类型.正确的电话会是:
sort<int, std::vector, Comparer>(m)
Run Code Online (Sandbox Code Playgroud)
请注意,sort它本身就是提供模板参数Container,如const Container<TType>&.显然,设置Container到std::vector<int>是没有意义的; 你会要求编译器做类似的事情std::vector<int><int>