首先,道歉,因为这个标题可能使你们中的某些c++家伙有些不高兴。但是,让我解释一下我要完成的工作。

我正在将lambda(称为funcA)作为参数传递给另一个函数(称为funcB)。有没有一种方法可以在funcB中声明变量并在funcA的范围内访问它们,而无需将它们作为参数传递给funcA,类似于javascript闭包的工作方式?

一个简单的示例(显然会失败)如下:

void funcB(std::function<void()> funcA) {
    int testInt = 44;
    funcA();
}

int main() {
    funcB([&]() {
        std::cout << testInt; // undefined identifier
    });

    return 0;
}

最佳答案

在这个特定示例中,惯用的方式是使用返回值:

void funcB(std::function<int()> funcA) {
    int testInt = funcA();
}

int main() {
    funcB([&]() {
        int testInt = 44;
        std::cout >> testInt;
        return testInt;
    });

    return 0;
}

可以使用输出参数,但不常用:
void funcB(std::function<void(int&)> funcA) {
    int testInt = 44;
    funcA(testInt);
}

int main() {
    funcB([&](int& testInt) {
        std::cout >> testInt;
    });

    return 0;
}

关于c++ - C++中的JavaScript样式关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60008932/

10-11 22:49