关联:
[modern c++] std::function的使用-2_ykun089的博客-CSDN博客
代码:
#include <iostream>
#include <functional>
using namespace std;
void(*p)(void);
int TestFunc()
{
auto func = []()->void {
cout << "123" << endl;
};
p = func;
return 0;
}
int main()
{
TestFunc();
p();
return 0;
}
可以正常输出 123。
lambda 的底层实现:
创建一个临时类,lambda的入参作为这个类型类的重载 operator() 的入参,捕获列表作为这个临时类的成员变量。比如 有 lambda [=a,&b](int i,int j) -> int { return i+j ;} ,那么 对应的临时类可以表示为:
class Tmp
{
Tmp(int i,int j):a(i),b(j){
}
bool operator(int i , int j ) { return i + j; }
int a;
int& b;
}