草庐IT

lambda表达式

全部标签

c++ - Lambda 表达式 : n3290 draft

n3290ISO草案中的一点:Lambda表达式:第5.1.2节,第6段:"Theclosuretypeforalambda-expressionwithnolambda-capturehasapublicnon-virtualnon-explicitconstconversionfunctiontopointertofunctionhavingthesameparameterandreturntypesastheclosuretype’sfunctioncalloperator.Thevaluereturnedbythisconversionfunctionshallbetheadd

c++ - 具有已知矩阵的模板矩阵表达式

这是一个思维练习,不是一个特定的问题,但我想听听你的意见。假设我有一些使用模板(Eigen、ublas等)的矩阵表达式DSL。现在假设我有一些常量矩阵,例如:Matrix2sigma1={{0,1},{1,0}};Matrix2sigma2={{0,i},{-i,0}};...etc...我对那些涉及运行时值的矩阵进行了一些操作:a*sigma1+b*sigma2;//a,bruntime您有什么想法来实现常量矩阵,以便编译器可以最大程度地优化表达式?特别是,如何将(i,j)运算符解析为常量? 最佳答案 根据我对问题空间的理解:给定

c++ - 为什么 std::basic_string 不支持通过表达式模板进行连接?

Qt的QString可以通过operator%连接起来,它使用表达式模板预先计算结果字符串的大小并优化对operator+的多个链式调用.参见thisquestionofmine了解更多信息。为什么std::basic_string没有采用类似的结构?C++11甚至允许这样做吗?我只看到优点,很明显,库实现者可以在需要时破坏ABI兼容性(C++11甚至为libstdc++提供了一个很好的理由)。 最佳答案 因为没有人提出标准;除非有人提出建议,否则它不会进入。还因为它可能会破坏现有代码(如果他们使用operator+就是这样)。此外

c++ - Visual 2010 中带有 lambda 函数和枚举的 C2665,是错误还是正常?

我可以编译以下代码:enumE{a,b,c};voidf(){Ee;std::functionf=[&](){e=a;};}但不是下面的:voidf(){enumE{a,b,c};Ee;std::functionf=[&](){e=a;};}发出以下编译器错误:1>test.cpp(5):errorC2665:'`anonymous-namespace'::::':noneofthe2overloadscouldconvertalltheargumenttypes1>test.cpp(5):couldbe'`anonymous-namespace'::::(f::E&,f::E&)'1

c++ - 通过模板化引用传递 C++11 lambda

在gcc4.5中,使用-std=c++0x,以下代码可以按预期编译和工作,#includetemplatevoidcaller(Hh){h();}intmain(){autoc=[](){printf("A\n");};caller(c);caller([](){printf("B\n");});return0;}打印,AB但是,如果caller被定义为引用,templatevoidcaller(H&h){h();}编译器提示,test.cpp:Infunction‘intmain()’:test.cpp:61:34:error:nomatchingfunctionforcallto‘

c++ - 如何使用 lambda 在 std::function 参数中推导模板类型?

我有一个boost::variant并且我只想在变体是特殊类型时才执行一个仿函数,所以我编写了这个函数:templatevoidif_init(Variant&opt_variant,std::functionfunctor){if(auto*ptr=boost::get(&opt_variant)){functor(*ptr);}}这很好用,但我希望推导出类型T,这样我就可以这样写:if_init(b,[](doublevar){std::cout但是没有推导出类型:type_inference.cpp:19:5:error:nomatchingfunctionforcallto'i

c++ - 未在 lambda 内部调用显式运算符 bool — MSVC 错误?

#includestructT{explicitoperatorbool(){returntrue;}};intmain(){Tt;if(t){}//OKautol=[&](){if(t){}//Error};}MSVC的行为在这里似乎奇怪地不一致;OK行和Error行之间的唯一区别是它们在lambda中。这是错误吗? 最佳答案 Isthisabug?是的,绝对是。您的程序没有任何问题,bool转换运算符在两种情况下都应被调用。 关于c++-未在lambda内部调用显式运算符bool—M

递归表达式类中的 C++ 运算符重载

我有一个递归类Expression表示类似bool的表达式,例如:(a&b)|(c&~d)请注意,Expression处理一元和二元表达式。基本上,Expression应该遵循类似于bool表达式的CFG。我是这样设计类的:classExpression{public:Expression()=default;Expression(unique_ptrlhs,unique_ptrrhs,unique_ptrbinop,unique_ptrunop);Expressionoperator^(Expression&that);Expressionoperator%(Expression&t

c++ - lambda 的类型是什么?

我见过这样的代码:std::sort(x,x+N,//Lambdaexpressionbegins[](floata,floatb){returnstd::abs(a)显然std::sort的第三个参数是可以容纳lambda的类型。但那是什么类型?std::sort过载太多,我无法破译它。(我正在考虑构建一个函数列表:我正在考虑使用lambda而不是函数指针,因为后者必须具有大致相同的参数列表)。我想我可以写autoletTheComplerSortOutTheType=[](floata,floatb){returnstd::abs(a)但这对我使用容器没有帮助。

为什么这种JSX表达会产生奇怪的结果?

当我发现这种奇怪的时候,我正在和JSX一起玩。使用以下JSX:{props.quote}将产生正确的结果:但是我想在报价周围添加双引号,所以我尝试了:"{props.quote}"令我惊讶的是,这给出了正确的输出:我期望与此类似的输出,因为它是一个字符串的文字:为什么不给我"{props.quote}"自从{props.quote}在字符串文字内吗?这是Babel的虫子吗?注意:这是一个自我问答看答案输出根本没有什么奇怪的。它正在按预期工作,没有错误。语义您必须了解的是,JSX不是JavaScript。在-的里面div,那不是字面的字面。这只是一些文本,类似于HTML中的文本节点。关于它应该是