我正在尝试使用带有状态的 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?
最佳答案
是的,通过引用接受 lambda。由于您无法命名其类型,因此您需要一个函数模板。
关于c++ - 使用带有状态的 Lambda 作为函数指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22040719/