2012-04-08 8 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

答えて

2

おかげで非推測コンテキストで、コンテキストが推論した場合でも、テンプレートテンプレートパラメータの不一致としてaswell。 std::vectorは、デフォルトでstd::allocatorに設定されている2番目のテンプレートパラメータであるアロケータを使用します。

推定されないコンテキストの場合、Tは決して推測できず、常に指定する必要があります。typenameはこれを示します。 See this question for the gory details.

+0

こんにちは、ありがとうございました。パラメータの不一致を回避する方法はありますか? (そしてリンクにもありがとう、それは本当に便利です) – user1192525

+0

イテレーターのテンプレートだけで、あなたが必要なのです。 'template // done'。 – Xeo

+0

うんが、最終的に私はSTLヘッダファイルを見ていたし、それをそのようにやった: 'テンプレート BOOL binary_search(_ForwardIterator __first、_ForwardIterator __last、 のconst _Tp&__val、_Compareの__compを) ' – user1192525

関連する問題