c++ - 使用带有状态的 Lambda 作为函数指针参数

标签 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 );
}

简单的解决方案,过载foo : void foo( std::function< void( unsigned long ) > func )

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

最佳答案

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

关于c++ - 使用带有状态的 Lambda 作为函数指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22040719/

相关文章:

c++ - 在 box2d 中操纵 Sprite 运动

c++ - 当参数按值传递时抛出异常

c++ - 添加虚拟删除错误 : type 'base' is not a direct base of derived class

c# - 根据指定字符串解析文件

C++,函数指针异常错误

C++实例化模板模板类

c# - 如何在泛型方法中反射(reflect) lambda 的属性?

amazon-web-services - 暂时禁用 DynamoDB Lambda 触发器/流

创建一个以函数指针作为参数的函数指针

c++ - static constexpr 指向函数的指针,编译器之间的区别