C ++ выводит методы и поля во внешнюю область без явных ссылок - PullRequest
1 голос
/ 27 июня 2019

Мне бы хотелось поведение, подобное тому, что неявные замыкания делают, приводя переменные в область видимости, без необходимости явного объявления ссылок

Пример структуры

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 голосов
/ 27 июня 2019

Это не удовлетворительное и не удобное для читателя решение. Гораздо лучше явно объявить ссылки, чем делать это.
Однако необходимо, чтобы переменные вводились в область видимости только один раз.
Методы спорщика служат блоками контекста.

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