我有这个代码:
#include <iostream>
#include <functional>
#include <vector>
int main () {
std::vector<int> kk;
kk.push_back(2);
std::function<int(int)> foo = std::function<int(int)>([kk](int x)
{
kk.push_back(1);
return kk[0]+1;
});
std::cout << "foo: " << foo(100) << '\n';
return 0;
}
为什么我不能修改lambda函数中通过捕获传递的向量kk
?
我得到了这个错误:
11: 21:错误:将“const std::vector”作为“void std:”vector的“this”参数传递
我可以通过引用传递它,但问题是,如果从线程调用lambda,那么它将超出范围,矢量将不再可用。
默认情况下,闭包类型将其oper()
声明为const
限定的成员函数。这意味着通过复制捕获的对象不能在lambda内部修改。要使oper()
成为非const
成员函数,您必须将lambda可变
标记为:
std::function<int(int)> foo{[kk](int x) mutable
{
kk.push_back(1);
return kk[0]+1;
}};
[现场示例]
(我还冒昧地删除了声明中的双精度型规范)。
当然,请记住,在捕获中制作的< code>kk副本是lambda对象的本地副本。调用< code>foo不会修改< code>main中的局部变量< code>kk。
我有两个功能。一个是,它以Int x和函数p作为参数,并返回布尔结果p(x)。就这么简单。 然后我有第二个函数,它就像 在调用时,有没有办法更改,使其像?(如果f返回true,则将其设为false) 比如: 我知道我可以通过masterChecker调用,但我想知道的是,是否可以更改作为参数传递的函数行为。
对不起,我不知道这个问题的标题是什么。 我在C中有一个函数,它以λ作为参数。 然后我尝试调用这个函数。 我的问题是,我无法从lambda函数内部访问变量,如果我试图用
下面可以看到使用的示例。我希望能够创建Foo的实例,其中每个实例都能够,在本例中,调用一个prespeficied getter函数。 我有大量具有可获取属性的类,并且需要能够在不同的地方获取所有这些属性,但唯一改变的是类的getter名称。
我正在尝试将参数传递给作为参数传递的函数指针。 代码: 我得到了这个错误: 类型"void"的参数与类型"void(*)(wchar_t*,wchar_t*)"的参数不兼容 如何解决此问题以完成我想要实现的目标? 编辑:对不起,不清楚。我实际上试图完成的是将函数注入子进程并传递两个参数(wchar_t*、wchar_t*),以便我可以使用它们。但主函数可以是void或int argc、char**
call.enqueue(new Callback(){ GetAllJsonDatum是一个类。我正在收到更多的THANK100000记录,我需要在后台处理这些数据,现在我需要访问它的一个函数或使它公开,以访问它在公共void onResponse(Call Call,Response Response)之外或制作这个响应的副本;谢谢