【发布时间】:2019-09-22 08:42:58
【问题描述】:
我在多态类 Parent 中有以下成员,我正在寻找一种方法将 foo 替换为某种虚拟成员 bar:
void Parent::myFunc() {
// lots of variables
// complicated calculations
while (/* loop condition */) {
// more variables and calculations
auto foo = [&](int n) {/* ... */};
foo(42);
// want to replace with virtual
// bar(42);
}
}
我遇到的问题是foo 捕获了所有内容,而我不知道授予bar 相同访问权限的正确方法。
- 将所有内容作为参数传递给
bar会导致参数列表很大,而且似乎不是一个优雅的解决方案 - 我还可以将
myFunc()的局部变量转换为Parent的成员,但这会不必要地延长这些变量的生命周期,尤其是循环变量。
【问题讨论】:
-
我不认为你的要求是可能的,因为 lambda 函数从它的封闭范围内静态捕获符号,而多态类型在运行时得到解析。您应该寻找替代方案。
-
您的设计可能还需要改进,但如果没有从细节开始就很难更具体。值得注意的是:您希望从使用虚函数中获得什么好处?
-
@JaMiT 我的意图是有一个
bar1. 捕获myFunc的局部变量和 2. 是多态的。我实际上不确定使用虚拟会员是否可以做到这一点。 -
使用仿函数并将
operator()虚拟化怎么样?为什么还要为bar捕获所有内容? -
除了显示您希望替换的内容之外,是否有任何理由在您当前的代码中使用 lambda?如果您立即调用它,捕获将无济于事……
标签: c++ lambda polymorphism anonymous-function