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

cmp是非static成员函数。必须在某个对象上调用它。要获得指向该成员函数的指针,您需要按照错误所述执行操作&Sched::cmp,但是您需要将其绑定到某些类型为Sched†</sup> 的对象。

但是,没有理由不这样做cmpstatic所以只需将其更改为:

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

另一种选择是在类之外和类的命名空间内创建 cmp 函数,以便

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