class StrangeFunctor
{
public:
StrangeFunctor(int (*comp)(string, string))
{
this->comp = comp;
}
int operator()(string str1, string str2)
{
return –comp(str1, str2);
}
private:
int (*comp)(string, string);
}
我只是好奇上面的代码实际上做了什么。假设函数被正确初始化并被赋予排序函数用于比较目的,我的预感是它颠倒了传递参数的顺序,但我不确定这是否正确以及为什么这是正确的。
答案 0 :(得分:1)
这个仿函数接受一个函数指针,然后翻转该方法返回值的符号。
return –comp(str1, str2);
如果像你所说的那样使用排序,它会反转原始函数指针给出的排序顺序。