其中有一个类Tree
,vector<Path*>
需要对其进行排序。比较器写道:
bool Tree::PathComparator(Path* a, Path* b)
{
return a->GetPath() < b->GetPath();
}
试图排序
sort(pathes.begin(), pathes.end(), PathComparator);
给出错误信息:
错误 C3867:Tree::PathComparator:函数调用缺少参数列表;使用“&Tree::PathComparator”创建指向成员的指针
错误 C2780:void std::sort(_RanIt,_RanIt):需要参数:2,具有:3
但是,如果您使比较器成为普通函数,而不是类的成员,那么一切正常。我想知道为什么会这样?
成员函数
bool Tree::PathComparator(Path* a, Path* b)
(和任何其他类成员函数)隐式接收一个对象作为其第一个参数*this
,也就是说,在这种情况下,参数中将包含 (Tree&, Path* a, Path* b)。这是成员函数和自由(根据您的定义是普通的)函数之间的主要区别。在这种情况下,为类定义一个运算符会更容易
<
,并且不需要传递比较器:但是如果您需要比较指针,则意味着您很可能做错了什么