lambda表达式可以作为函数指针传递吗?

Lou*_*ong 29 c++ lambda function-pointers c++11

我试图将一个lambda表达式传递给一个带有函数指针的函数,这是否可能?

这是一些示例代码,我正在使用VS2010:

#include <iostream>
using namespace std;

void func(int i){cout << "I'V BEEN CALLED: " << i <<endl;}

void fptrfunc(void (*fptr)(int i), int j){fptr(j);}

int main(){
    fptrfunc(func,10); //this is ok
    fptrfunc([](int i){cout << "LAMBDA CALL " << i << endl; }, 20); //DOES NOT COMPILE
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ter*_*fey 26

在VC10 RTM中,没有 - 但是在VC10中的lambda特性完成之后,标准委员会确实添加了允许无状态lambdas降级为函数指针的语言.所以在未来这将是可能的.

  • @rlbond:N3090/3092,§5.1.2/ 6 (3认同)

fre*_*low 14

你可以使用std::function这个:

void fptrfunc(std::function<void (int)> fun, int j)
{
    fun(j);
}
Run Code Online (Sandbox Code Playgroud)

或者完全通用:

template <typename Fun>
void fptrfunc(Fun fun, int j)
{
    fun(j);
}
Run Code Online (Sandbox Code Playgroud)