3

私はすぐに爆発しています...誰かが現在ここで何が間違っているかを指摘してください:

template <typename TType, template <typename ...> class Container, class Comparer>
Container<TType>* sort(const Container<TType>& container) {
    ...
}

Container パラメーターとして std::vector を使用してこの関数を呼び出そうとすると、問題が発生します。次のエラーが表示されます。

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>&Containerに設定しstd::vector<int>ても意味がないことは明らかです。あなたはコンパイラに次のようなことをするように頼むでしょうstd::vector<int><int>

于 2013-04-26T21:08:45.760 に答える