C ++将方法和字段引入外部范围,而无需显式引用

时间:2019-06-27 18:05:16

标签: c++ scope closures using member

我想要一种类似于闭包隐式执行的行为,将变量引入范围,而不必显式声明引用

示例结构

struct A{
    T x;
    void g();
};

行为效果,真实但不希望的语法

void f(){
    A a;
    T& x= a.x;
    void(A::*g)()= &A::g; //method pointer; obvious why this is undesirable
    //...
};

所需的不受支持的语法

void f(){
    A a;
    using a;
    //invalid/unsupported use of keyword
}
void f(){
    A a;
    [&a]{
        //...
        //lambdas only bring members into scope for keyword this
    }();
}

1 个答案:

答案 0 :(得分:0)

这不是令人满意的,也不是读者友好的解决方案。显式声明引用比这样做要好得多。
但是,它只需要将变量明确地一次带入作用域即可。
牧马人的方法用作范围块。

struct wrangler{
    T& a;
    void(A::*g)()= &A::g;
    void f(){
        //...
    }
}