如何修改lambda指针捕获?

时间:2015-02-18 23:38:02

标签: c++ lambda

所以我想做的只是修改参数中传递的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值是一个值类型而不是一个指针,那么它就可以工作。

1 个答案:

答案 0 :(得分:2)

x仍然是lambda中的指针。

下面的代码应该有用。

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

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