Почему мне не удается захватить указатель this с помощью лямбда?

Рассмотрим следующий код:

class A
{
public:
    void foo()
    {
        auto functor = [this]() 
            {
                A * a = this;
                auto functor = [a]() // The compiler won't accept "this" instead of "a"
                    {
                        a->bar();
                    };
            };
    }

    void bar() {}
};

В VC2010 использование this вместо a приводит к ошибкам компиляции . Среди прочего:

1>main.cpp(20): error C3480: '`anonymous-namespace'::<lambda0>::__this': a lambda capture variable must be from an enclosing function scope
1>main.cpp(22): error C3493: 'this' cannot be implicitly captured because no default capture mode has been specified

Чего я не понимаю. Означает ли это, что он не знает, следует ли использовать ссылку или копировать ее? При попытке использовать & this для принудительной ссылки, он также говорит:

1>main.cpp(20): error C3496: 'this' is always captured by value: '&' ignored

Временное не так раздражает, но ради любопытства, есть ли способ избавиться от него? Что происходит, когда этот передается лямбда?

8
задан einpoklum - reinstate Monica 22 August 2017 в 21:22
поделиться