1.仿函数的定义
仿函数简单说就是在类中定义的特殊函数,没有函数名,或者说函数名统一为“operation()”,或者可以认为是重载运算符()。
格式为:
返回类型 operator()(参数列表);
定义了仿函数的对象,可以直接通过下面格式调用仿函数。
对象名(仿函数参数列表);
如果你看到了一个定义了一半的构造函数,那么大概率是仿函数。
例子:
class StringAppend {
public:
explicit StringAppend(const string& str) : ss(str){}
void operator() (const string& str) const {
cout << str << ' ' << ss << endl;
}
private:
const string ss;
};
int main() {
StringAppend myFunctor2("and world!");
myFunctor2("Hello");
}
但是这种写法实在是过于的low,看不出来仿函数有任何鸟用。我直接定义一个成员函数的事情。
2.仿函数的意义:代替函数指针
如果我们需要使用函数指针,有时候是一个非常麻烦的事情。这种情况可以使用仿函数代替。
假如你有如下逻辑: