有没有办法定义成员 lambda 来使用 `this`?

问题描述 投票:0回答:1

关于lambda capture有很多问题,但我认为这对处于类似情况的新手来说会有点帮助。

我想实现类似于下面的功能(这没有意义):

struct Person{
    std::string sName;
    std::string(*introduce)();
};
int main(){
    Person p1{
        "John",
        []()->std::string{
            return "my name is " + this->sName; // I wish this `this` indicates `p1`, which does not.
        }
    };
    std::cout << p1.introduce() << std::endl;
}

我的解决方法:

struct Person{
    std::string sName;
    std::string(*introduce)(Person*);
};
int main(){
    Person p1{
        "John",
        [](Person* pPerson)->std::string{
            return "my name is " + pPerson->sName;
        }
    };
    std::cout << p1.introduce(&p1) << std::endl;
}

但我认为可能有更好的方法。有人可以建议吗? 谢谢你。

c++ lambda
1个回答
0
投票

我猜你希望能够更改该功能,我也会创建一个方法。此方法调用您设置为成员的函数。无论如何,我建议您检查多态性是否适合您的需求。通过多态性,您可以使用抽象方法创建基类或结构,然后在派生类和结构中重写它以更改其行为。希望对大家有帮助

© www.soinside.com 2019 - 2024. All rights reserved.