草庐IT

lambda表达式

全部标签

c++ - 在 C++11 中重新绑定(bind) lambda...这可能吗?

我有一个情况,我有一个lambda作为由某个函数调用创建的成员变量。问题是它将此作为其操作的一部分进行捕获。稍后,我希望能够复制整个对象...但是,在复制时我不知道lambda是如何创建的(它可能是通过不同的代码路径在多个位置定义的)。因此,对于在复制构造函数中放入什么,我有些不知所措。理想情况下,我想将lambda的捕获“重新绑定(bind)”到创建的新“this”。这有可能吗?下面是一些示例代码:#include#include#includeclassFoo{public:Foo()=default;~Foo()=default;voidset(conststd::string&

c++ - 是否可以在浏览器呈现之前拦截 http 请求并修改数据(例如使用正则表达式替换内容)?如果是这样,如何?

今天我偶然发现了Wireshark,它能够拦截您PC上的所有网络流量。我想知道是否可以在请求后修改数据(因此发送回PC的数据)并使用正则表达式修改它?就像在浏览器中呈现数据之前替换数据中的单词和模式一样?(示例:将“疯狂”一词替换为“快乐”或将整个网站替换为“停止拖延”)如果可能的话:我应该如何实现?哪些功能必不可少?是否有任何开源库可以帮助我完成此任务?在实现之前我应该​​先阅读什么内容?请注意,此平台将是Windows,我将尝试在C++中执行此操作 最佳答案 您可以使用WinDivert(LGPL)为此目的(免责声明:WinDi

c++ - 用于编译时强制 constexpr 函数评估的单个表达式助手可能吗?

@cyberpunk_正在努力实现某些目标并提出一些问题,但所有的追求都归结为:是否可以构建一个工具来强制执行constexpr函数的编译时评估?intf(inti){returni;}constexprintg(inti){returni;}intmain(){f(at_compilation(g,0));intx=at_compilation(g,1);constexprinty=at_compilation(g,2);}在所有情况下,at_compilation强制执行g的编译时评估。at_compilation不需要采用这种形式。要求允许任何(原生数字)文字类型作为conste

c++ - Lambda 函数,奇怪的行为

假设我们在全局命名空间中声明了以下lambda:autoLess=[](inta,intb)->bool{returna以及以下使用此lambda的代码:templatestructfoo{foo(intv){}booloperator&)const{returnT(1,2);}};intmain(){typedeffoobe_less;priority_queuedata;}如你所见,我使用Less作为结构foo的模板参数.对于g++4.9.2,此代码无法编译:test1.cpp:13:21:error:nomatchingfunctionforcallto'::__lambda0(

c++ - 有符号和无符号整数表达式与 0x80000000 之间的比较

我有以下代码:#includeusingnamespacestd;intmain(){inta=0x80000000;if(a==0x80000000)a=42;cout输出是HelloWorld!::42所以比较有效。但是编译器告诉我g++-c-pipe-g-Wall-W-fPIE-I../untitled-I.-I../bin/Qt/5.4/gcc_64/mkspecs/linux-g++-omain.o../untitled/main.cpp../untitled/main.cpp:Infunction'intmain()':../untitled/main.cpp:8:13:w

C++ 表达式必须有一个常量值

我有这个方法:voidcreateSomething(Items&items){intarr[items.count];//numberofitems}但是它抛出一个错误:expressionmusthaveaconstantvalue我找到了这个解决方案:int**arr=newint*[items.count];所以我想问有没有更好的方法来处理这个问题? 最佳答案 您可以使用std::vectorvoidcreateSomething(Items&items){std::vectorarr(items.count);//numb

c++ - std::equal_range 与 lambda

假设我有一个字符串vector,我想找到所有以'a'开头的字符串,所以我可以这样做:structcmp{booloperator()(conststd::string&s,charc)const{returns.front()strings;...std::sort(strings.begin(),strings.end());autorange=std::equal_range(strings.begin(),strings.end(),'a',cmp{});...这种方法容易出错,容易出错(比如我觉得第二种方法应该是c),而且代码重复。那么是否可以使用通用lambda而不是使用2种

c++ - 为什么我们需要为 lambda 中的引用捕获引用?

考虑一下:classTestLambda{public:std::vectordata;};voidtest_lambda(TestLambda&obj){[=]()mutable{obj.data.push_back(0x01);}();}intmain(){TestLambdatst;tst.data.push_back(0x99);test_lambda(tst);//tst.dataisunchangedatthispointreturn0;}在调用test_lambda后,我希望看到tst.data发生变化,但事实并非如此。要查看更改,我必须创建再次传递obj引用的lambd

c++ - lambda 闭包中的模板

谁能告诉我为什么下面的代码namespacedetail{...templatevoidduk_get_args(duk_context*&context,std::function&func){duk_get_args_impl(context,func,std::index_sequence_for());}}templateduk_c_functionduk_function(std::functionfunction_item){std::functionclosure_function=function_item;duk_c_functionfunction_return=[

c++ - std::functions 和 lambda 函数传递

我有一个将std::function作为参数的类,我分配了一个lambda函数。它在构造函数中工作,但之后停止工作。调试器在运行第一行后说f是“空的”。为什么?#include#include#includetypedefstd::functionconst&fn;classTestClass{public:TestClass(fn_f):f(_f){F();}voidF(){f("hello");};private:fnf;};intmain(){TestClasst([](std::stringstr){std::cout调用t.F()会导致错误。为什么?我可以通过将其更改为以下内