0

私の質問は多くの点でこれに似ています:関数を介してカスタム コンパレータを渡しますが、そこで提案された解決策を試しましたが、機能しませんでした。

一言で言えば、いくつかのソートされた構造を保持し、常に 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: このプロジェクトではブーストを使用していません。

4

2 に答える 2