私の質問は多くの点でこれに似ています:関数を介してカスタム コンパレータを渡しますが、そこで提案された解決策を試しましたが、機能しませんでした。
一言で言えば、いくつかのソートされた構造を保持し、常に type の要素に対していくつかの比較を実行しint
、すべて同じ順序付けを使用するメソッドがあります。順序は、メソッドが呼び出されたときに決定されます。
意図した呼び出しは次のようになります。myFunction(std::greater<int>());
まず、関数を次のように宣言しようとしましvoid myFunction(binary_operator<int, int, bool> order);
たが、この説明によるbinary_function
と、関数呼び出しで基底クラスとして機能するのには適していません。
最後に、テンプレートの使用を提案したこの回答(および他の多くのサイト)からの提案を試しました。しかし、まだコードをコンパイルできません。
最小限の非動作例:
template <typename Comparator>
void myFunction(Comparator order){
if (order(1,2)){
// some stuff
// COMPILES OK
}
std::vector <int> vecToSort;
// ... initialize
std::sort(vecToSort.begin(), vecToSort.end(), order); // works
// COMPILES OK
std::multimap <int, int, order > boundary;
// STARTS KICKING, SCREAMING AND SHOUTHING
}
そして私が得るコンパイルエラー:
エラー: 'template class std::multimap' のテンプレート パラメーター リストの引数 3 で型/値が一致しません エラー: 型が必要ですが、'order' を取得しました</p>
同じトリックが両方で機能するはずだと思いました。そうではありません。(編集: type
/のobject
問題を確認できます)
誰かがここで何が起こっている のか、関数の引数として渡された順序を使用する方法を説明できますか?multimap
PS: このプロジェクトではブーストを使用していません。