2012-04-08 27 views
0

我想使用模板模板參數定義一個函數(我只是想知道它是如何工作的)。我有以下幾點:在函數中使用模板模板參數沒有匹配的函數錯誤

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

Nop。以防萬一我將函數名稱更改爲'my_binary_search()',它也不起作用。 – user1192525 2012-04-08 11:50:02

回答

2

你有什麼是一個非推斷背景下,作爲藏漢即使背景是推論出的模板的模板參數不匹配。 std::vector需要第二個模板參數,分配器,默認爲std::allocator

對於未推斷的上下文,T永遠不能被推斷,並且將始終需要指定,typename表示這一點。 See this question for the gory details.

+0

嗨,非常感謝您的澄清。有沒有辦法解決參數不匹配問題? (也感謝鏈接,這真的很有用) – user1192525 2012-04-08 12:09:19

+0

只需迭代器模板,這就是你所需要的。 'template // done'。 – Xeo 2012-04-08 12:12:28

+0

是的,最後我只好看看STL的頭文件,做了這樣的說法:'模板 布爾 binary_search(_ForwardIterator __first,_ForwardIterator __last, 常量_TP&__val,_Compare __comp) ' – user1192525 2012-04-08 12:36:20