0

というクラスがありSorterます。2 つのパブリック アイテムがあります。

  1. intタイプ変数choice
  2. 2 つのオブジェクトをパラメーターとして受け入れる型の戻り値で呼び出さcompareれるメンバー関数。int

コンストラクタに値をSorter渡して whileのインスタンスを作ってみたところ、choice

次に、C++sort関数を使用してvector. compare作成したインスタンスのメンバー関数を渡します。

compareメンバー関数は、変数を使用しchoiceて並べ替えメカニズムを決定します。

compareしかし、 のインスタンスのメンバ関数へのポインタを取得できませんでしたSorter

誰かがこれについて私にアドバイスできますか?

4

2 に答える 2

4

クラスの構造を変更できる場合は、次のようSorterに定義して関数オブジェクトにすることができます。operator ()

bool Sorter::operator ()(const MyObject &o1, const MyObject &o2) {
  // return true if o1 < o2
}

Sorter次に、クラスのインスタンスを に渡すだけですstd::sort

于 2011-01-22T17:46:36.680 に答える
0

残念ながら、標準ライブラリには、このようなものに対するコンビネータが少し欠けています。しかし、boost::lambdaは仕事をすることができます:

#include <boost/lambda/bind.hpp>

namespace l = boost::lambda;

struct foo {
    bool bar(char, char);
};


void test(foo *pFoo) {
    char a[2] = {0};

    std::sort(a, a+1,
            l::bind(&foo::bar, pFoo, l::_1, l::_2));
}
于 2011-01-22T17:49:08.063 に答える