草庐IT

boost-lambda

全部标签

c++ - 如何为 lambda 创建 'reference'?

我想捕获对lambda的“引用”,我认为函数指针可以解决问题,如下所示:int(*factorial)(int)=[&](intx){return(x但我得到cannotconvertfrommain::lambdatoint(_cdecl*)(int).那么指向lambda的正确方法是什么? 最佳答案 由于lambda不是无状态的,因此不能将其转换为函数指针。请改用std::function。std::functionfactorial=[&](intx){return(x 关于c++

使用 lambda 的 c++11 排序列表

在练习使用lambda时,我编写了这个程序,它应该根据第二个元素(一个int).#include#include#includeusingnamespacestd;intmain(){list>s={{"two",2},{"one",1},{"three",3}};sort(s.begin(),s.end(),[](paira,pairb)->bool{return(a.second)>(b.second);});for_each(s.begin(),s.end(),[](paira){coutIgetthoseerrors,though:c:\qt\qt5.2.0\tools\min

c++ - 如何使用 boost::write_graphviz 编写 GraphViz 子图

是否可以使用::boost::write_graphviz生成DOT子图?例如,如果我在图G中创建一个子图G0,我能否在DOT输出中得到如下内容:graphG{subgraphG0{...}...} 最佳答案 我终于明白了子图的工作原理和如何使用boost::write_graphviz来实际打印这些。第一个要求是在boost库源代码的注释中“半记录”:requiresgraph_nameproperty。然而,最令人惊讶的要求似乎是detail::write_graphviz_subgraph假定存在顶点属性edge_attrib

c++ - 以缓慢的插入性能 boost 多索引

我有以下代码(主要遵循此处的第一个示例:http://www.boost.org/doc/libs/1_42_0/libs/multi_index/doc/examples.html))。由于某种原因,只有10000次插入到多索引,运行程序需要几分钟。我做错了什么或者这是预期的吗?structA{intid;intname;intage;A(intid_,intname_,intage_):id(id_),name(name_),age(age_){}};/*tagsforaccessingthecorrespondingindices*/structid{};structname{}

c++ - 带有模板的 lambda

我目前正在使用模板函数做一些练习。我的任务是编写转换算法的实现。我做了如下操作并且有效:templateoutstransform(inb,ine,outd,Tp(constT&)){while(b!=e)*d++=p(*b++);returnd;}与普通转换一样,我必须使用显式类型调用谓词stransform(begin(vec1),end(vec1),back_inserter(vec2),predi);现在,我偶然发现了C++11Lambda,并想这样调用我的函数:stransform(begin(vec1),end(vec1),back_inserter(vec2),[](do

c++ - boost::asio::io_service 就绪处理程序的定义是什么?

我试图了解io_service的poll()/poll_one()和run()/run_one()之间的区别。文档中所述的区别在于poll()执行就绪处理程序,而不是执行任何处理程序的run()。但是我在boost文档中的任何地方都找不到“就绪处理程序”的定义。这个问题的有效答案是能够显示(最好是通过代码示例)就绪处理程序和未就绪处理程序之间的区别以及poll()和run()执行它的方式之间的区别。谢谢。 最佳答案 “就绪处理程序”是准备好执行的处理程序。如果您发出了一个异步调用,它会在后台执行,并且它的处理程序在异步调用完成后准备

c++ - lambda 始终返回 '1'

有这样的代码#includeusingnamespacestd;intmain(){coutint{return0;};coutdouble{return3.2;};coutbool{returntrue;};coutbool{returnfalse;};coutconstchar*{return"Helloworld!";};return0;}用gccversion4.8.2编译它,我的输出只有1111111111。为什么只有“1”? 最佳答案 当lambda表达式没有捕获时,它可以隐式转换为函数指针。反过来,函数指针可以隐式转换

C++ 将 lambda 函数保存为没有函数指针的成员变量以进行优化

我想用C++编写一个将lambda函数保存为成员变量的类。尽可能高效地做到这一点会很棒。例如,我阅读了这个线程Whycanlambdasbebetteroptimizedbythecompilerthanplainfunctions?因此我想避免使用函数指针。到目前为止,我最好的解决方案如下:templateclassLambdaClass{private:FlambdaFunc;public:LambdaClass(F&_lambdaFunc):lambdaFunc(_lambdaFunc){}};我会按如下方式使用这个类:autolambdaFunc=[](int_a)->int{

c++ - 为什么我不能将 boost::function 存储在 std::list 中?

我得到以下编译错误:error:expected`;'before'it'"这是我的代码:#include#includetemplatevoidexample(){std::list>::iteratorit;}为什么会这样?我该如何解决? 最佳答案 您需要将typename放在该行的前面,因为您执行::iterator的类型取决于模板参数T。像这样:templatevoidexample(){typenamestd::list>::iteratorit;}考虑这条线std::list>::iterator*it;这可能意味着乘法

c++ - 如何在项目中只包含 BOOST 智能指针代码?

仅包含boost智能指针库而不将所有boost库添加到项目中的最佳实践是什么?我只想在我的项目中使用boost智能指针库,我不想为此将200MB源代码(boost1.42.0)checkin/提交到我的项目存储库中。更重要的是,我的WindowsMobile项目本身甚至达不到该大小的10%! 最佳答案 对于智能指针库,您有两个选择。复制源文件中包含的header(shared_ptr.hpp等)。然后复制其他文件直到项目构建(确保保持目录结构)。使用boostbcp公用事业。对于较大的子集,此工具可以节省大量时间。前者将确保将尽可能