如何在C ++中的类外部定义lambda函数并在类中使用它?

庙宇

我想做这样的事情:

// define a lambda to be called from some class method
auto state_0_stuff = [&](){
    .
    caller_data.some_func();  <-- identifier undefined compiler error
    .
}

// call the lambda from some class method, capturing the data and using in the lambda.
void foo::some_func(){
    int state = 0;
    bool done = false;
    // more data...
    bar caller_data;

    while(!done){
        switch(state){
        case 0:
           state_0_stuff();       <-- instead of adding lots of code here, call lambda
           state = 1;
           break;
        case 1:
           done = true;
           break;
        }
    }
}

如果我在foo :: some_func主体中定义lambda,这将起作用,但是如果我尝试在外部定义lambda,则将不起作用。

有一些相对简单的语法可以达到这种效果吗?

我不在乎是否使用lambda,这只是我的第一个想法。目的是简化switch(state)的内容,以使代码比在情况下添加50行内容时更具可读性。

显然,我可以使用普通的函数,并来回传递一堆东西,但是如果像Lambda那样仅由函数捕获本地状态,则复杂得多。

罗密欧

无法隐式捕获Lambda中超出对象范围的对象。您需要明确地传递它们。

作为解决方案,您可以向其中添加private成员函数foo并调用它:

void foo::case0(bar& caller_data, /* ... */) 
{
    lots_of_calcs_that_reference_caller_data();
    .
    caller_data.some_func();
    .
}

void foo::some_func(){
    int state = 0;
    bool done = false;
    // more data...
    bar caller_data;

    while(!done){
        switch(state){
        case 0:
           case0(caller_data, /* ... */);
           state = 1;
           break;
        case 1:
           done = true;
           break;
        }
    }
}

否则,您可以创建一个struct带有重载的,operator()并在其构造函数中传递“捕获”。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从一个类中获取int值并在另一个中使用它

如何在Python中使用C ++类?

我如何从类继承方法并在其他活动中使用它们

如何在继承的类中设置父类变量的值,然后在继承的函数中使用它?

如何在我的Flutter App中创建sharedpreferences类并在各处使用它

如何在C ++中的类构造函数中使用线程?

如何在Angular中将类样式从父级传递到子级,并在特定元素中使用它

构造函数中使用lambda的C ++类

如何从一个块中获取对象并在另一个类或方法中使用它?

如何在类中使用getElementById获取值并在其他类中使用它

如何在代码中创建自定义UIButton并在xib中使用它?

如何使用字符串作为类名并在函数中调用它

如何在C ++中的函数定义中调用类

如何在C中使用函数读取数字并在main中使用它?

当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

如何使用应用程序类来启动服务并在我的活动中使用它?

如何在 Aurelia 中使用注入类中的函数?

如何在php中的类/函数/对象中使用外部变量

如何在单独的 xib 文件和单独的类中创建工具栏并在多个视图控制器中使用它?

如何从一个有状态类中的文件加载数据并在 flutter 中的另一个有状态类中使用它?

我可以在带有类型提供程序的 F# 类库中创建 API 网关,并在 C# 解决方案中使用它来使用 swagger 在外部 Web Api 上获取智能感知吗?

如何在 MVC 视图页面中使用我的 c# 类文件中定义的枚举

如何从父类构造函数中获取变量并在子类中使用它?

如何更改子类中的类属性,并在父类中定义的方法中使用它?

如何在Javascript类方法内的函数中使用它

如何在扩展类中使用方法并在主类中使用它们

如何从类中的用户输入设置值并在第二类中使用它们?

如何在类中创建 Pause 函数,然后在海龟游戏中使用它?

如何获取底层 std::complex<T> 的类型并在类中使用它