我自己写了一个sort()的比较函数。 我这样说的时候效果很好。
bool comp(string a, string b)
{
...;
}
int main()
{
sort(...,...,comp);
}
但是,当我把所有这些都放在课堂上时,请说:
class Test {
public:
bool comp(string a,string b)
{
...;
}
vector <string> CustomSort(vector <string> str) {
sort(...,...,comp);
}
};
存在编译错误“没有匹配函数来调用'sort ......'。
为什么会发生这种情况?
答案 0 :(得分:6)
类X
的任何非静态成员函数都有一个额外的参数 - 指向(const
)X
的引用/指针,它变为this
。因此,成员函数的签名不能被sort
消化。您需要使用boost::bind
或std::mem_fun
或std::mem_fun_ref
。使用C ++ 11时,您可以使用std::bind
。
std::sort(..., ..., std::bind(&Test::comp, this, _1, _2));
考虑到这一点,在这种情况下,最好的解决方案是使你的comp函数保持静态,因为它根本不需要this
。在这种情况下,您的原始代码将无需更改即可使用。