仿函数(Functor)是C++中的一种可调用对象(Callable Object),也是一种重载了函数调用运算符(operator())的类或结构体。
仿函数可以像函数一样被调用,可以带参数,可以返回值。通过重载函数调用运算符,可以实现各种不同的函数行为。
在C++中,有两种类型的仿函数,一种是函数对象,一种是函数指针。函数对象是一个类或结构体,函数指针则是指向函数的指针。
函数对象可以通过定义一个类或结构体,并重载该类的函数调用运算符,来实现自定义的函数行为。例如,可以定义一个加法仿函数:
struct AddFunctor{int operator()(int a, int b){return a + b;}
};int main(){AddFunctor add;int result = add(2, 3); // 调用仿函数return 0;
}
函数指针则是指向函数的指针,可以直接将函数名赋给函数指针,然后通过函数指针调用函数。例如,可以定义一个函数指针,指向一个打印字符串的函数:
#include <iostream>void printString(const std::string& str){std::cout << str << std::endl;
}int main(){void (*printPtr)(const std::string&) = &printString; // 定义函数指针并指向printString函数printPtr("Hello, World!"); // 通过函数指针调用函数return 0;
}
使用仿函数的好处是可以将函数行为封装在一个类中,可以方便地进行函数组合、函数适配等操作。此外,使用仿函数还可以实现函数对象的状态保存,因为仿函数是一个对象,可以有成员变量。
总结来说,仿函数是一个可调用的对象,可以像函数一样被调用。可以通过定义一个类或结构体,并重载函数调用运算符,来实现自定义的函数行为。仿函数可以通过函数对象或函数指针来实现。