将Lambda与State一起用作函数指针参数

时间:2014-02-26 12:00:23

标签: c++ lambda function-pointers std-function

我正在尝试使用带状态的lambda作为函数指针参数,这里的状态意味着它从它的上下文中捕获。根据这个不合法的问题:Why does the implicit "lambda to function pointer conversion" forbid the "by reference" capture of static members?

当前函数我想将lambda传递给:void foo( void( func* )( unsigned long ) )

这是我正在创建我要传递的lambda的简化版本:

void MyClass::myClassFunc( int a, int b, int c )
{
    auto myLambda = [&]( unsigned long val ){ a+=val;b+=val;c+=val; };
    foo( /*some magic conversion*/ myLambda );
}

轻松解决方案,重载foovoid foo( std::function< void( unsigned long ) > func )

简单的解决方案是不可取的,因为它要求我修改不属于我的代码。有没有办法只能在调用代码时以某种方式转换lambda?

1 个答案:

答案 0 :(得分:1)

是的,通过引用接受lambda。由于您无法命名其类型,因此您需要一个功能模板。