1

ベクトルソート用のコンパレータ関数を定義する必要があります。

   class Sched
    {
    public:
    struct Op
    {
      // some data
    };
    typedef std::pair<Op*,Clk> OpSchedule;
    void genSched() { std::sort(m_mappedOp.begin(),m_mappedOp.end(),cmp)}

    private:
    std::vector<OpSchedule> m_mappedOp;
    bool cmp(const OpSchedule& l,const OpSchedule& r)
    {
      return l.second< r.second;
    }

コンパイルエラーが発生します:

function call missing argument list; use '&Sched::cmp' to create a pointer to member.

誰かがそれを解決する方法とエラーの理由をアドバイスできますか?ありがとう

4

2 に答える 2

6

cmpstaticメンバー関数です。あるオブジェクトで呼び出す必要があります。そのメンバー関数へのポインターを取得するには、エラーが示すように行う必要がありますが、次に、それをタイプ†</sup>&Sched::cmpのオブジェクトにバインドする必要があります。Sched

ただし、そうでない理由はないのでcmp、次のstaticように変更してください。

static bool cmp(const OpSchedule& l,const OpSchedule& r)
{
  return l.second < r.second;
}

その後、あなたは今しているようにそれを渡すことができます。

†これを、で実行してstd::bind(&Sched::cmp, this, std::placeholders::_1, std::placeholders::_2)、メンバー関数をにバインドできますthis

于 2013-03-03T12:23:08.370 に答える
1

もう 1 つのオプションは、cmp 関数をクラスの外側とクラスの名前空間の内側に作成することです。

    void genSched() 
    { 
       using namespace <classNmaespace>;
       std::sort(m_mappedOp.begin(),m_mappedOp.end(),cmp)
    }
于 2013-03-03T12:37:23.050 に答える