1

テンプレート テンプレート パラメーターを使用して関数を定義しようとしています (そのしくみを知りたいだけです)。私は次のものを持っています:

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)’

このエラーを整理するのに役立つ適切な応答が見つかりません。どんな助けでも大歓迎です。

前もって感謝します

4

1 に答える 1

2

あなたが持っているのは、推測されていないコンテキストであり、コンテキストが推測可能であったとしても、テンプレート テンプレート パラメーターの不一致です。std::vectorは、2 番目のテンプレート パラメータであるアロケータを受け取ります。これは、デフォルトで に設定されていstd::allocatorます。

非推定コンテキストの場合、推定Tすることはできず、常に指定する必要がありますtypename。 はこれを示します。詳細については、この質問を参照してください。

于 2012-04-08T11:49:25.247 に答える