我正在尝试使用模板模板参数定义一个函数(我只是想知道它是如何工作的)。我有以下内容:
template <typename T, template <typename> class Cont>
typename Cont<T>::iterator binary_search (typename Cont<T>::iterator first, typename Cont<T>::iterator last)
{
typename Cont<T>::iterator it;
// ...
return it;
}
然后在main ()
函数中:
std::vector<int> data;
// ....
std::vector<int>::iterator it = binary_search (data.begin (),data.end ());
尝试编译代码时出现此错误:
binary_search.cpp: In function ‘int main(int, char**)’:
binary_search.cpp:43:83: error: no matching function for call to ‘binary_search(std::vector<int>::iterator, std::vector<int>::iterator)’
我找不到任何合适的回复来帮助我理清这个错误。任何帮助将不胜感激。
提前致谢
答案 0 :(得分:2)
您拥有的是非推断的上下文,以及模板模板参数不匹配,即使上下文是可推导的。 std::vector
接受第二个模板参数,即分配器,默认为std::allocator
。
对于非推断的上下文,T
永远不会被推导出来并且必须始终指定,typename
表示这一点。 See this question for the gory details.