lambda表达式作为函数的入参时如果直接这么写会报错
#include <iostream>
#include <algorithm>
using namespace std;
void fun( void (*f)() )
{
f();
}
int main()
{
int num=10;
fun(
[=]()
{
int b;
b=num;
}
);
return 0;
}
内容为
error: cannot convert ‘main()::<lambda()>’ to ‘void ()()’ for argument ‘1’ to 'void fun(void ()())’|
这时候需要用到std::function模板类,做以下改动就可以 了
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
void fun( std::function<void()>f )
{
f();
}
int main()
{
int num=10;
fun(
[=]()
{
int b;
b=num;
}
);
return 0;
}