Когда использовать это для функции класса в лямбде - PullRequest
0 голосов
/ 05 февраля 2019

Когда this следует использовать в лямбде для вызова функции-члена класса?У меня есть пример ниже, где hello(); вызывается без this, но this->goodbye(); делает:

#include <iostream>

class A
{   
    void hello() { std::cout << "hello" << std::endl; }
    void goodbye() { std::cout << "goodbye" << std::endl; }

public:  
    void greet()
    {   
        auto hi = [this] () { hello(); }; // Don't need this.
        auto bye = [this] () { this->goodbye(); }; // Using this.

        hi();
        bye();
    }   
};  


int main()
{   
    A a;
    a.greet();
    return 0;
}   

Есть ли какое-либо преимущество перед одним из них?

Редактировать:Лямбда для hello ничего не захватывает, но она наследует функции, существующие в области видимости класса.Он не может сделать это для членов, почему он может сделать это для функций?

1 Ответ

0 голосов
/ 05 февраля 2019

this является более явным и более подробным.

, но это также может потребоваться для переменных, которые скрывают член (захват или аргумент):

auto goodbye = [](){}; // Hide method
auto bye = [=] (int hello) {
    this->goodbye(); // call method
    goodbye(); // call above lambda.
    this->hello(); // call method
    std::cout << 2 * hello; // show int parameter.
};
...