我需要为矢量排序定义一个比较器函数:
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.
有人可以建议如何解决这个问题以及错误的原因是什么? 感谢
答案 0 :(得分:6)
cmp
是非static
成员函数。必须在某个对象上调用它。要获得指向该成员函数的指针,您需要按照错误&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
。
答案 1 :(得分:1)
另一种选择是将cmp函数放在类之外和类的命名空间内,以便
void genSched()
{
using namespace <classNmaespace>;
std::sort(m_mappedOp.begin(),m_mappedOp.end(),cmp)
}