如何在带有捕获的函数中传递lambda?

刺客兽

我的头衔是我的主要问题。下面的代码显示了我想做什么,但是会导致错误。

class B
{
public:
    void DoSomething(void (*func)())
    {
        func();
    }
};

class A
{
public:
    int x;
    void Start(B* b)
    {
        auto func = [this]()->void
        {
            this->x++;
        };
        b->DoSomething(func);
    }
};

如果删除“ this”关键字,则程序可以运行,但是无法引用x变量。

那么我该如何实现呢?

德鲁·多曼(Drew Dormann)

更改

void DoSomething( void (*func)() )

void DoSomething( std::function<void()> func )

您当前的参数类型void (*func)()是一个函数指针,它是一种不保持状态的可调用(可以像函数一样调用的类型)。这就是为什么您的变量this无法传递到函数中的原因。只有不捕获任何内容的lambda可以转换为无状态函数指针。

std::function但是可以代表(几乎)任何可调用的东西它可以是原始函数,operator()也可以是实现的类的实例,也可以是lambda保持状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将带有捕获的lambda传递给模板化函数

将带有已移动捕获的lambda传递给函数

如何在带有访问者的lambda中调用std :: visit,访问者是按值捕获的函数对象

如何在lambda中捕获函数结果?

如何在python中传递带有参数的函数?

Swift-如何在函数的参数中传递带有参数的函数?

如何在Java 8中传递带有参数作为参数的Lambda表达式?

如何在C ++函数中传递Lambda函数?

如何在带有单引号的js函数中传递多个参数

如何在PHP中传递带有ob_start参数的回调函数?

如何在React中通过带有事件处理函数的prop来传递?

如何在jthread中传递带有参数和stop_condition的函数?

如何在Android自定义数据绑定中传递带有参数的函数

如何在备忘录中传递带有参数的函数

如何在函数之间传递带有chan的var

如何在PHP中捕获带有可选空格的链接?

QTimer单发,在捕获中传递带有异常的lambda

如何在lambda函数中传递和检索多个参数?

如何在不创建箭头函数的情况下在 React 中传递带有参数的函数作为 prop

如何在带有参数的函数中调用变量函数?

如何在nohup中传递带有空格的参数?

如何在C ++中传递带有'&'符号的参数

在lambda函数中捕获和传递参数之间的区别

如何在Lambda中捕获变量

JS中带有参数传递的函数

如何在带有附加参数的其他函数中调用带有参数的函数?

如何在Assembly中调用带有大量arg的函数

如何在Octave中定义带有参数的函数?

如何在Django模板中调用带有参数的函数?