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