草庐IT

lambda表达式

全部标签

如何定义表达式翻译器?

我定义了两种几乎相同的语言(fooandbar):theorySimpTrimportsMainbegintype_synonymvname="string"type_synonym'aenv="vname⇒'aoption"datatypefoo_exp=FooBConstbool|FooIConstint|FooLetvnamefoo_expfoo_exp|FooVarvname|FooAndfoo_expfoo_expdatatypebar_exp=BarBConstbool|BarIConstint|BarLetvnamebar_expbar_exp|BarVarvname|BarAn

c++ - 为什么 for_each + lambda 会触发 -Waggregate-return 警告?

当尝试使用gcc和-Waggregate-return标记警告的以下示例时:functioncallhasaggregatevaluetriggers:structElement{//...stuff...}Containerelements(10);for_each(begin(elements),end(elements),[](Element&e){//...modifyelements...});据我所知,-Waggregate-return标记“如果定义或调用任何返回结构或union的函数时发出警告”,因为如果我理解正确的话,您可能通过返回足够大的对象来溢出堆栈。但是,for

c++ - 编译器错误或非标准代码? - lambda 中的可变参数模板捕获

我有以下C++11代码;templateintg(T...t){return0;}templatevoidf(Args...args){autolm=[&,args...]{returng(args...);};lm();}intmain(){f(2,5,7);}我确实相信它是有效的C++11,根据;标准第5.1.2.23节;Acapturefollowedbyanellipsisisapackexpansion(14.5.3).[Example:templatevoidf(Args...args){autolm=[&,args...]{returng(args...);};lm();

C++ lambda : Access static method in lambda leads to error 'this was not captured for this lambda function'

考虑以下代码://thisiswhatIwanttocall;Icannotmodifyitssignaturevoidsome_library_method(void(*fp)(void));classSingleton{public:staticSingleton*instance();voidfoo();voidbar();private:Singleton();};voidSingleton::foo(){//thisleadstoanerror('this'wasnotcapturedforthislambdafunction)void(*func_pointer)(void

c++ - 为什么 gdb 在 !=/== 和 &&/|| 时不能计算函数组合在一个表达式中?

这可能是我在描述我的问题时遇到的困难是我找不到其他人的原因。我使用的是gdb7.4-2012.04。至少看起来任何包含!=/==和&&/||的表达式forvectors或vectoriterators将无法在gdb中评估并出现以下错误:无法访问地址为0x0的内存这是一个测试用例,后面是我的编译行和测试:#include#include#include#includeusingnamespacestd;typedefcharGUID[32];intmain(intargc,char**argv){vectorvec;for(inti=0;i::iteratorvecIter=vec.be

c++ - 变量模板 + std::map 的通用 lambda

安answertoC++14VariableTemplates:whatisthepurpose?Anyusageexample?提出了一个变量模板+通用lambda的用法示例,看起来像这样:voidsome_func(){templatestd::mapstorage;autostore=[](intkey,constT&value){storage.insert(key,value)};store(0,2);store(1,"Hello"s);store(2,0.7);//Allthreevaluesarestoredinadifferentmap,accordingtotheir

c++ - 一种关于类成员访问表达式的定义规则

在N4296中,3.2[basic.def.odr]p3:Avariablexwhosenameappearsasapotentially-evaluatedexpressionexisodr-usedbyexunlessapplyingthelvalue-to-rvalueconversiontoxyieldsaconstantexpressionthatdoesnotinvokeanynon-trivialfunctionsand,ifxisanobject,exisanelementofthesetofpotentialresultsofanexpressione,whereei

C++11 正则表达式,非贪婪

我对C++11正则表达式有点问题,我认为它与贪婪有关。这是一个小例子。#include#include#includeintmain(void){std::stringin="{ab}{cd}[ef]{gh}[ij][kl]";//theinput-stringstd::regexrx1("(\\{.+?})(.*)",std::regex::extended);//non-greedy?std::smatchmatch;if(regex_match(in,match,rx1)){printf("\n%s\n",match.str(1).c_str());}return0;}我希望{a

c++ - 如何在 boost::transform_iterator 中使用 phoenix 表达式?

和往常一样,这个问题是错误的。实际问题是:为什么transform_iterator不使用传统的result_of元函数来确定返回类型,而是直接访问UnaryFunc::result_type。发布了一个解决方法的答案。具体来说,是否有办法使phoenix表达式按照std::unary_function概念的预期公开result_type类型?boost::transform_iterator似乎预料到了这一点,从它的src来看,我没有看到一个简单的解决方法。下面是一些重现我遇到的问题的代码:#include#include#include#includeusingnamespaceb

c++ - C++03 中的 Lambda

因此,我正在尝试替换以下代码(C++11):structtest{constchar*n;inti;std::functionread;std::functionwrite;};#definedefine_test(n,i,bodyRead,bodyWrite)\{n,i,[](){bodyRead;},[](intv){bodyWrite;}}std::initializer_listtests={define_test("test1",1,return1,v=2),...};使用C++03兼容代码产生相同的效果:structtest{test(constchar*_n,int_i,