Захват этого необходим для доступа к функциям-членам? - PullRequest
2 голосов
/ 20 июня 2011

Я использую цикл std::for_each для локальной переменной функции-члена класса. Я хотел бы вызвать другую функцию-член того же класса из лямбды в for_each. Ниже приведен упрощенный пример того, что я пытаюсь сделать:

void some_class::another_function()
{
    cout << "error";
}
void some_class::some_function( function<bool(const int)> &f)
{
    vector<int> local_variable = {0,0,0,1,1,3,5,43};

    std::for_each( local_variable.begin(), local_variable.end(),
            [&f](const int item)
            {
                if( !f(item) )
                    another_function();
            }
}

GCC 4.6 сообщает мне, что this не захвачено (поэтому я должен это сделать) Это лучшее решение? Или я должен захватывать только те функции, которые мне нужны (но это может быть грязно для больших конструкций)?

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

GCC прав: для вызова функций-членов на this изнутри лямбды, вы должны захватить this. Если функция-член не зависит от членов-данных, сделайте ее static, и тогда вам не нужно захватывать this.

Вы не можете захватывать «функции», только локальные переменные (включая параметры и this, но не конкретные элементы данных).

1 голос
/ 20 июня 2011

Вам нужно захватить this, если вы хотите вызывать функции-члены, и это в значительной степени конец.

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