在一个类中
我想使用sort函数调用同一个类中的cmp函数时
class A{
bool cmp(int x,int y){
return x<y;
}
int st(vector<int >&a){
sort(a.begin(),a.end(),cmp);
}
}
会发生错误:
因为成员函数。究其原因,是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的this指针,然后才能调用指针所指的成员函数(我们知道,所有类的对象都有自己数据成员的拷贝,但是成员函数都是共用的,为了区分是谁调用了成员函数,就必须有this指针,this指针是隐式的添加到函数参数列表里去的)。
所以上述成员函数实际上的参数有三个:
bool cmp(A *this,int x,int y)
这样我们才可以调用this指针修改对象。
但是sort需要的cmp函数指针和成员函数指针不同,所以需要将cmp转为所需的函数类型
静态成员函数指针和普通函数指针是相同的,所以只要在前面加上static使之变为静态成员函数即可:
static bool cmp(int x,int y)