我正在尝试使用带状态的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 );
}
轻松解决方案,重载foo
:void foo( std::function< void( unsigned long ) > func )
简单的解决方案是不可取的,因为它要求我修改不属于我的代码。有没有办法只能在调用代码时以某种方式转换lambda?
答案 0 :(得分:1)
是的,通过引用接受lambda。由于您无法命名其类型,因此您需要一个功能模板。