std::function
std::function 是C++11引入的类模板包装器,可以用来存储可调用对象 。使用该模板类需要导入 functional 头文件。
前面提到 std::function 可以存储可调用对象,那么什么是可调用对象呢? 简单来说可调用对象是指可以像函数一样被调用的实体,以下给出几个例子。
函数指针
int (*func)(int ,int)
重载了()运算符的类
class A{
public:
void operator()(){
cout << "operator()" << endl;
}
};
lambda表达式
auto func = []{
cout << "lambda" << endl;
}
使用
现在围绕上述的几个类型展示function的简单使用:
#include <iostream>
#include <functional>
struct A {
void operator()() {
std::cout << "operator()\n";
}
};
void func() {
std::cout << "function\n";
}
int main() {
std::function<void(void)> f = A{};
f(); // 输出 "operator()"
f = []{
std::cout << "lambda\n";
};
f(); // 输出 ”lambda“
f = func;
f(); // 输出 ”function“
}
可以观察到,尖括号里面是写的 void(void), 在模板中尖括号里面写的是 类型,这种类似 void(void) 的叫做函数类型,代表一个返回 void,参数类型 是 void的函数,同理如果我有一个函数是int func(int, int) 那么所对应的函数类型就是int(int, int)。