如何修改 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
时,您会创建它的副本。
所以我想做的只是修改参数中传递的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
时,您会创建它的副本。