用于排序的比较器

Jie*_*eng 4 c++ visual-c++

我正在查看http://www.cplusplus.com/reference/algorithm/sort/并希望实现类似的东西:我定义了一个函数clauseComparator,就像myfunc在提供的链接中的示例中给出的那样.

bool QueryEvaluatorPrivate::clauseComparator(QueryClause cl1, QueryClause cl2) {
    int priority1 = clausePriority(cl1), 
        priority2 = clausePriority(cl2);
    return priority1 < priority2;
}
Run Code Online (Sandbox Code Playgroud)

我用它像:

sort(clauses.begin(), clauses.end(), clauseComparator);
Run Code Online (Sandbox Code Playgroud)

但VS抱怨说:

Error   4   error C3867: 'QueryEvaluatorPrivate::clauseComparator': function call missing argument list; use '&QueryEvaluatorPrivate::clauseComparator' to create a pointer to member   h:\dropbox\sch\cs3202\code\source\query\query evaluator\queryevaluator.cpp  138
Error   5   error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided h:\dropbox\sch\cs3202\code\source\query\query evaluator\queryevaluator.cpp  138
Run Code Online (Sandbox Code Playgroud)

首先是什么错误(缺少arg列表)?我尝试按照错误中给出的建议添加&并最终结束

Error   4   error C2276: '&' : illegal operation on bound member function expression    h:\dropbox\sch\cs3202\code\source\query\query evaluator\queryevaluator.cpp  138
Error   5   error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided h:\dropbox\sch\cs3202\code\source\query\query evaluator\queryevaluator.cpp  138
Run Code Online (Sandbox Code Playgroud)

这里有什么不对?在我的理解中,它应该传递一个我理解也应该被接受的函数指针sort

Ed *_*rbu 5

您需要将您的成员函数设置为静态才能被访问sort.在您的班级标题中,请声明如下:

static bool QueryEvaluatorPrivate::clauseComparator(const QueryClause & cl1, const QueryClause & cl2);

没有必要使用bind,因为您的比较器最有可能(或不应该)需要访问类成员.