草庐IT

generic-lambda

全部标签

c++ - 将 lambda 转换为 std::function 时强制执行常量正确性

我有一个函数将std::function作为参数。但是,我想确保传入的函数不允许修改传递给它的参数。下面是该函数的简单版本(注意T可以而且通常是引用):templatevoidBar(std::function)>func){//...}错误用法:Bar([](int&){/*Donastystuff!*/});/*A-OK!*/我想禁止这种用法,但这段代码编译得非常好,即使我觉得它不应该。有趣的是,如果我去掉模板参数,即:voidBar(std::functionfunc){//...}那么,这个用法就不会编译(因为它不应该):Bar([](int&){/*Donastystuff!

c++ - 错误,无法在构造函数主体中构造 lambda 的拷贝

这个问题在这里已经有了答案:UnderstandinghowLambdaclosuretypehasdeleteddefaultconstructor(2个答案)关闭5年前。下面接受一种初始化成员的方式,另一种是错误的。我不明白:templatestructLambdaHolder{LambdaHolder(TlambdaIn){lambda=lambdaIn;}//ThiswillnotworkLambdaHolder(TlambdaIn):lambda(lambdaIn){}//ThiswillworkfineTlambda;};intmain(){autolambda=[](){

c++ - 通过 lambda 部分特化类模板

我有存储函数或成员函数信息(如返回类型、数字或参数等)的模板类型。templatestructSFuncInfo{usingSignature=R(FuncParams...);usingRet=R;staticconstexprsize_tnumParams=sizeof...(FuncParams);};//membertemplatestructSFuncInfo:SFuncInfo{staticconstexprboolisMemberFunction=true;};//functiontemplatestructSFuncInfo:SFuncInfo{staticconste

λ-矩阵的多项式展开

原文链接定义.对于m×nm\timesnm×n的λ\lambdaλ-矩阵A(λ)=[a11(λ)...a1n(λ)⋮⋮am1(λ)...amn(λ)]\mathbf{A}(\lambda)=\begin{bmatrix}a_{11}(\lambda)&...&a_{1n}(\lambda)\\\vdots&&\vdots\\a_{m1}(\lambda)&...&a_{mn}(\lambda)\end{bmatrix}A(λ)=​a11​(λ)⋮am1​(λ)​......​a1n​(λ)⋮amn​(λ)​​称L=max⁡1≤i≤m1≤j≤ndeg⁡{aij(λ)}L=\max\limits_

c++ - boost::lambda 表达式无法编译

我尝试使用boostlambda库编写一个函数来计算两个码字之间的汉明距离。我有以下代码:#include#include#include#include#include#include#includetemplateinthammingDistance(Container&a,Container&b){returnstd::inner_product(a.begin(),a.end(),b.begin(),(_1+_2),boost::lambda::if_then_else_return(_1!=_2,1,0));}intmain(){boost::arraya={1,0,1},b

c++ - 使用 STL/Boost/Lambdas 调整映射迭代器

考虑以下非工作代码:typedefmapmymap;mymapm;for(inti=1;i(),3));我正在尝试从这张map中删除元素.second.这显然没有写对。我如何正确地写这个:使用bind的标准STL函数对象和技术+less但无需编写自定义仿函数提升.绑定(bind)C++0xLambda我知道我不是erase荷兰国际集团的元素。别担心;我只是简化要解决的问题。 最佳答案 我不确定如何仅使用STL绑定(bind)器来执行此操作,但我认为您的主要问题是传递给remove的仿函数的内容是什么?不只是一个int但是一个pair

c++ - Lambda 表达式 : n3290 draft

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

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