3

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

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

感谢您的每一个帮助, - 乔伊

4

1 回答 1

10

您应该提供一个模板,而不是从模板创建的特定类型。正确的调用是:

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

请注意,sort它本身正在为 提供模板参数Container,如const Container<TType>&. 明确设置Containerstd::vector<int>没有意义;你会要求编译器做类似的事情std::vector<int><int>

于 2013-04-26T21:08:45.760 回答