草庐IT

lambda-calculus

全部标签

c++ - 通过值可变捕获的 lambda 不适用于 const &?

考虑以下几点:voidtest(constint&value){autotestConstRefMutableCopy=[value]()mutable{value=2;//compileerror:Cannotassigntoavariablecapturedbycopyinanon-mutablelambda};intvalueCopy=value;autotestCopyMutableCopy=[valueCopy]()mutable{valueCopy=2;//compilesOK};}当我将lambda声明为可变并按值捕获value时(我认为是复制了它),为什么第一个版本会出

c++ - 通过值可变捕获的 lambda 不适用于 const &?

考虑以下几点:voidtest(constint&value){autotestConstRefMutableCopy=[value]()mutable{value=2;//compileerror:Cannotassigntoavariablecapturedbycopyinanon-mutablelambda};intvalueCopy=value;autotestCopyMutableCopy=[valueCopy]()mutable{valueCopy=2;//compilesOK};}当我将lambda声明为可变并按值捕获value时(我认为是复制了它),为什么第一个版本会出

c++ - map , lambda ,remove_if

所以,我对std::map、lambda和STL算法(remove_if)有疑问。实际上,与std::list或std::vector相同的代码效果很好。我的测试示例:#include#include#includestructFoo{Foo():_id(0){}Foo(intid):_id(id){}int_id;};typedefstd::mapFooMap;intmain(){FooMapm;for(inti=0;i>>std::remove_if(m.begin(),m.end(),[=](constFooMap::value_type&item){returnitem.sec

c++ - map , lambda ,remove_if

所以,我对std::map、lambda和STL算法(remove_if)有疑问。实际上,与std::list或std::vector相同的代码效果很好。我的测试示例:#include#include#includestructFoo{Foo():_id(0){}Foo(intid):_id(id){}int_id;};typedefstd::mapFooMap;intmain(){FooMapm;for(inti=0;i>>std::remove_if(m.begin(),m.end(),[=](constFooMap::value_type&item){returnitem.sec

c++ - c++11/1y lambda 函数的类型签名是什么?

我想知道是否有一种标准方法来获取任何给定lambda的参数的类型签名(即返回类型和类型)?我问的原因是我一直想知道auto到底是什么类型在声明中,如autol=[](intx,inty)->int{returnx+y;}.在auto的其他用例中,对于较长的类型名称,它是一种方便且较短的替代方法。但是对于lambdas,是否还有另一种声明lambda变量的方法?我的理解是,一个标准的lambda只不过是一个函数对象,它是它自己的类型。因此,即使两个lambda具有相同的返回类型和参数类型,它们仍然是两个不同的、不相关的类/仿函数。但这有办法捕捉它们在类型签名方面相同的事实吗?我认为我正在

c++ - c++11/1y lambda 函数的类型签名是什么?

我想知道是否有一种标准方法来获取任何给定lambda的参数的类型签名(即返回类型和类型)?我问的原因是我一直想知道auto到底是什么类型在声明中,如autol=[](intx,inty)->int{returnx+y;}.在auto的其他用例中,对于较长的类型名称,它是一种方便且较短的替代方法。但是对于lambdas,是否还有另一种声明lambda变量的方法?我的理解是,一个标准的lambda只不过是一个函数对象,它是它自己的类型。因此,即使两个lambda具有相同的返回类型和参数类型,它们仍然是两个不同的、不相关的类/仿函数。但这有办法捕捉它们在类型签名方面相同的事实吗?我认为我正在

c++ - lambda 可以有外部 "C"链接吗?

这似乎适用于我尝试过的平台:#include//extern"C"linkageextern"C"voidfoo(void(*fn_ptr)(int));namespace{structbar{staticvoidf(int);};}intmain(){//Usuallyworksonmostplatforms,notguaranteedthough:foo(bar::f);//Probablyequallybadorworse?foo([](intx){std::cout但又是passingastaticmemberfunctionalsoworkedontheseplatforms

c++ - lambda 可以有外部 "C"链接吗?

这似乎适用于我尝试过的平台:#include//extern"C"linkageextern"C"voidfoo(void(*fn_ptr)(int));namespace{structbar{staticvoidf(int);};}intmain(){//Usuallyworksonmostplatforms,notguaranteedthough:foo(bar::f);//Probablyequallybadorworse?foo([](intx){std::cout但又是passingastaticmemberfunctionalsoworkedontheseplatforms

c++ - C++0x 中的闭包和嵌套 lambda

使用C++0x,当我在lambda中有一个lambda时,如何捕获一个变量?例如:std::vectorc1;intv=10;c2;std::for_each(c2.begin(),c2.end(),[v](intnum) 最佳答案 std::for_each(c1.begin(),c1.end(),[&](intnum){std::vectorc2;int&v_=v;std::for_each(c2.begin(),c2.end(),[&](intnum){v_=num;});});不是特别干净,但确实有效。

c++ - C++0x 中的闭包和嵌套 lambda

使用C++0x,当我在lambda中有一个lambda时,如何捕获一个变量?例如:std::vectorc1;intv=10;c2;std::for_each(c2.begin(),c2.end(),[v](intnum) 最佳答案 std::for_each(c1.begin(),c1.end(),[&](intnum){std::vectorc2;int&v_=v;std::for_each(c2.begin(),c2.end(),[&](intnum){v_=num;});});不是特别干净,但确实有效。