本文介绍C++ standard library中的function object
definition
只要一个class/struct实现了operator(),就可以称之为function object(或者functor)。
create a function object
要创建一个function object,只需要创建class/struct的时候实现operator()就可以了:
class Functor(){
public:
// 因为class Funcator实现了operator,所以Functor是一个function object
int operator()(int a, int b){
return a < b;
}
};
int main(){
Functor f;
// 第一种调用方式
int res = f(5,6); // res = 1
// 第二种调用方式
f.operator()(5, 6);
return 0;
}
可以看出,调用function object和调用一个普通的function很像,不同的是实际上是调用了function object实现的operator()方法。也正因为调用function object和调用function很像,所以才称之为function object。
function object VS function
自然而然我们会有这样一个问题:既然已经有function了,为什么还需要function object, 而function object对比function的优势在哪里?
相比之下,function object有如下两个优势:
- function object是一个class/struct,所以可以保存状态
- function object是一个class/struct,所以可以用作template
优势1:
假如我们需要实现这样一个function: 它可以
加密传入的字符串
用header和footer封装加密好的字符串
返回加密封装后的字符串
首先,我们看看怎么用function pointer来实现这个功能:
std::string (*encryptionFunc)(std::string)
是我们需要的加密function,它的返回参数是string,输入参数也是string
std::string func(std::string rawData, std::string (*encryptionFunc)(std::string)){
rawData