如何修改 lambda 指针捕获?

How to modify a lambda pointer capture?

所以我想做的只是修改参数中传递的x值。

class B
{
public:
    void DoSomething(function<void()> func)
    {
        func();
    }
};

class A
{
public:
    void Start(B* b, int* x)
    {
        auto func = [&x]()->void
        {
            x++;
            cout << x;
        };
        b->DoSomething(func);
    }
};

我尝试了各种组合,但就是行不通。 如果 x 值是一个值类型而不是一个指针,那么它就可以工作。

x 仍然是 lambda 内部的指针。

下面的代码应该可以工作。

auto func = [&x]()->void
{
    (*x)++;
    cout << (*x);
};

通过引用捕获意味着您可以修改原始值 x 但它不会更改变量的类型。 如果您通过引用捕获变量,您可以设置由 x 指向的地址。这是因为您在 lambda 中引用了原始指针。当您按值捕获 x 时,您会创建它的副本。