草庐IT

lambda表达式

全部标签

c++ - 是否可以找出多态 C++ 14 lambda 的参数类型和返回类型?

从这个问题(Isitpossibletofigureouttheparametertypeandreturntypeofalambda?)开始,我大量使用了建议的function_traits。然而,随着C++14的出现,多态lambda表达式出现了,它们让我很为难。templatestructfunction_traits:publicfunction_traits{};//Forgenerictypes,directlyusetheresultofthesignatureofits'operator()'templatestructfunction_traits//wespecia

c++ - 一个只接受编译时已知表达式的函数?

编译时表达式很好,因为您可以使用它们来专门化模板。因此,例如,可以通过使用编译时表达式和std::get方法来访问元组。std::cout(my_tuple)现在,上面的表达式很难看。我正在尝试自己开发某种元组(希望能够将它们变成编译时字典),因此,比如说,它们以以下形式公开一种方法:my_dict.get();现在,我想做的是将其替换为[]运算符。我想知道这是否可能。首先,我不知道如何只选择常量、编译时已知的表达式作为我的运算符的参数。此外,返回类型将取决于常量表达式的值。然而,有了定义,我可以用类似的东西更接近我想要的东西#defineitem(x)get()这样我就可以使用my_

c++ - 类模板中不可能有默认的 lambda

我发现不能创建一个工作模板类,其中有一个默认的无所事事的std::function,但是如果我们创建非模板类,就没有问题使用默认值。默认lambda没有捕获。请参阅:structDump{functionf=[](bool){};};intmain(){Dumpa;a.f(true);}上面的例子是可行的,但是当参数化时(甚至不使用参数)templatestructDump{functionf=[](bool){};};intmain(){Dumpa;a.f(true);}编译时出现错误:error:conversionfrom'Dump::__lambda0'tonon-scalar

c++ - 如何计算 MathML 表达式?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭5年前。Improvethisquestion给定一些MathML内容:cab和std::mapcal;cal["a"]=1.;cal["b"]=2.;cal["c"]=0;//doesnotmatterwhatcis我想评估MathML并检索结果。有什么办法吗?

匹配或什么都没有的正则表达

我试图在两个HTML标签之间找到一个值,即:可以有一个字符\w或什么都没有(甚至没有>关闭开头支架。所以我正在尝试这个/[\w{1,}|]/但是它不起作用。这是针对PHP的,是的,我很清楚有些人警告不要以正则表达方式解析HTML;)...任何帮助,将不胜感激。谢谢看答案/\w*/如果您想拥有匹配组,则需要括号内而不是括号:/(\w*)/要匹配“无”*

c++ - 转换表达式模板树

给定一个表达式模板树,我想在处理它之前创建一个新的优化树。考虑以下乘法运算示例:a*b*c*d,由于operator*的从左到右的结合性,它产生了表达式树:(((a*b)*c)*d).我想生成一个转换后的表达式树,其中乘法从右到左发生:(a*(b*(c*d))).考虑二进制表达式类型:templatestructBinaryTimesExpr{BinaryTimesExpr()=default;BinaryTimesExpr(constBinaryTimesExpr&)=default;BinaryTimesExpr(BinaryTimesExpr&&)=default;BinaryT

c++ - Lambda 表达式作为 C++14 中的类模板参数

问题Lambdaexpressionsasclasstemplateparameters询问使用lambda表达式作为类模板参数的可能性。问题的答案是否定的。然而,它是关于C++11的。新标准C++14中的情况是否发生了变化? 最佳答案 不,C++14中的情况根本没有改变,事实上5.1.2Lambda表达式段落2已收紧:Alambda-expressionshallnotappearinanunevaluatedoperand(Clause5).到:[...]Alambda-expressionshallnotappearinanu

c++ - 使用枚举作为常量表达式。哪个编译器是正确的?

以下代码使用枚举成员m作为常量表达式,即作为模板参数。代码在gcc下编译但不在clang(livedemo)下编译。Clang说“错误:非类型模板参数不是常量表达式”。问题可以通过交换线路//1来解决通过A::m>a.因此,我的问题不是如何解决这个问题,而是哪个编译器是正确的。templatestructA{};templatestructtst{enum:size_t{m=n%15};templatevoidcall(tstconst&t2){Aa;//1}}; 最佳答案 根据标准,Clang拒绝代码是正确的。t2.m是类成员访问

c++ - 可变参数模板 lambda 参数的模板推导

给定以下可变参数模板:templatevoidfun(void(*f)(Params...),Params...params){f(params...);}intmain(){fun(+[](inta,intb){},2,3);}现在,当使用lambda调用fun时,我需要明确指定所有lambda参数的类型。这似乎是多余的,因为int,int可以从2,3推导出来。有没有办法让它更简洁和自动化?我希望下面的方法起作用,但它不起作用:templatevoidfun(void(*f)(Params...),Params...params){f(params...);}intmain(){fu

c++ - C++14 中泛型 Lambda 中的依赖表达式和 ODR 使用

voidf(int,constint(&)[2]={}){}//#1voidf(int,constint(&)[1]){}//#2//voidf(constint&,constint(&)[1]){}//#2_originalvoidtest(){constintx=17;autog=[](autoa){f(x);//OK:calls#1,doesnotcapturex};autog2=[/*=*/](autoa){intselector[sizeof(a)==1?1:2]{};f(x,selector);//OK:isadependentexpression,socapturesx?