Как сохранить лямбду для последующего обратного вызова? - PullRequest
2 голосов
/ 08 ноября 2011

Как мне исправить приведенный ниже код, чтобы сохранить лямбду, чтобы я мог вызвать ее позже?

В настоящее время я получаю сообщение об ошибке: поле 'm_callback' имеет неполный тип .

class Foo
{
    public:
        Foo()  { }
        ~Foo() { }

        template< typename FuncT > 
        void setCallback( FuncT&& callback )
        {
            m_callback = callback;
        }

    private:
        auto m_callback;   // this line is broken
};
int main(int argc, char** argv)
{
    Foo foo;

    foo.setCallback( [] (int x){ return true; } );

    return 0;
}

Ответы [ 2 ]

9 голосов
/ 08 ноября 2011

Нельзя использовать ключевое слово auto.Я рекомендую использовать что-то вроде этого:

#include <functional>
std::function<bool (int)> m_callback;

Это сделано из Visual Studio 2010.

7 голосов
/ 08 ноября 2011

Ключевое слово auto может использоваться только в сочетании с выражением инициализации .

Итак ... это работает:

auto callback = [](int x){ return x == 0; };

...но это не так:

auto callback;
callback = [](int x){ return x == 0; };

Я бы порекомендовал вам использовать что-то вроде function с определенной подписью для представления обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...