草庐IT

boost-move

全部标签

c++ - 如何确定 boost::variant 变量是否为空?

我定义了一个boost::variantvar是这样的:boost::variantfoo;此变量在实例化但未初始化时具有boost::blank类型的值,因为boost::blank是传递给模板化boost的第一个类型::变体。有时,我想知道foo是否已经初始化。我试过这个,但没有好的结果:if(foo)//doesn'tcompileif(foo!=boost::blank())//doesn'tcompileif(!(foo==boost::blank()))//doesn'tcompile我认为值得注意的是,当foo已初始化(例如,foo=true)时,可以通过执行foo来“重

c++ - Boost Graph Library 中的顶点描述符和索引有什么区别?

在Boost图形库中,什么时候应该使用顶点描述符,什么时候使用索引?由于vertex_descriptor的实现实际上是无符号整数,那么这两个东西是否具有相同的值? 最佳答案 vertex_descriptor仅在您使用vector(或类似的)作为顶点的基础数据结构(即boost::vecS)时作为索引。如果您使用不同的底层数据结构,则顶点描述符不一定是索引。例如,如果您使用std::list/boost::listS-列表不使用基于索引的访问方法。相反,每个vertex_descriptor将改为指向列表项的指针。因此,每次你想在

c++ - Boost ASIO 能否用于构建低延迟应用程序?

BoostASIO能否用于构建低延迟应用程序,例如HFT(高频交易)?因此Boost.ASIO使用平台特定的最优解复用机制:IOCP、epoll、kqueue、poll_set、/dev/poll也可以与TOE(TCP/IP卸载引擎)和OpenOnload(内核旁路BSD套接字)一起使用以太网适配器。但是可以使用Boost.ASIO+TOE+OpenOnload构建低延迟应用程序吗? 最佳答案 这是Asio作者的建议,已发布到公开的SG-14GoogleGroup(不幸的是有问题,他们已转移到另一个邮件列表系统):Idoworkon

c++ - 暂停 boost::thread 无限时间

我正在使用boost::thread库(V1.44)来支持我的C++项目中的线程。用户需要能够无限期地暂停在自己的线程中运行的测试循环的执行并且能够在他愿意的时候恢复它。在Windows下我是这样解决的boolContintueLoop(){if(testLoopPaused){//testLoopPausedcanbesetbytheuserviaGUIelementstry{boost::this_thread::interruptible_wait(2147483648);//that'sveryugly,//somebodyknowstherightwaytopauseitfo

c++ - 右值引用 : Why aren't rvalues implicitly moved?

在关于C++右值引用(http://www.artima.com/cppsource/rvalue.html)的Artima文章中有这样的话:这就是为什么在向下传递到基类时必须说move(x)而不是只说x的原因。这是移动语义的一个关键安全特性,旨在防止从某个命名变量意外移动两次。我想不出这样的双招可以执行的情况。你能举个例子吗?换句话说,如果T&&的所有成员都是右值引用而不仅仅是引用,会出现什么问题? 最佳答案 考虑这个场景:voidfoo(std::stringx){}voidbar(std::stringy){}voidtest

C++11:使用 std::move 只对临时对象安全吗?

在我的代码中,我有这样的东西:unordered_multimap>mEntities;...vector>rawEntities;if(qi::phrase_parse(&buf[0],(&buf[0])+buf.size(),EntityParser(),qi::space,rawEntities)){for(auto&propGroup:rawEntities){autosearch=propGroup.find("classname");if(search!=propGroup.end()){//isstealingpropGroupsafe???mEntities.empla

c++ - 为什么可以 move 不可变的 lambda 捕获?

AFAIK非可变lambda将变量捕获为常量。这让我想知道为什么他们还能被感动?autop=std::make_unique(0);autof=[p=std::move(p)](){p->reset();};//Error,pisconstautof2=std::move(f);//OK,thepointerstoredinsidelambdaismoved 最佳答案 AFAIKnon-mutablelambdascapturevariablesasconst.不,他们没有。它们的operator()重载是const。实际的成员变量

c++ - 带有 const 指针的 boost::dynamic_pointer_cast 不起作用?

假设我有两个类,A和B,其中B是A的子类。我还有以下功能:voidfoo(boost::shared_ptra){boost::shared_ptrb=boost::dynamic_pointer_cast(a);//Error!}用gcc编译会出现以下错误:C:\Boost\include/boost/smart_ptr/shared_ptr.hpp:Inconstructor'boost::shared_ptr>::shared_ptr(constboost::shared_ptr&,boost::detail::dynamic_cast_tag)[withY=constA,T=c

c++ - 如何实现BOOST_TYPEOF?

这里我想了解实现BOOST_TYPEOF的大致思路。我的意思是代码可能没问题,但我想代码不会像真正的Boost实现那样简单。因此,我想了解BOOST_TYPEOF实现的想法。它是否使用编译器函数(一些API)来理解编译时表达式的类型? 最佳答案 在核心,Boost::Typeof使用sizeof非求值上下文将表达式的类型转换为整数,然后再将其转换回类型。考虑:templatestructsizer{charvalue[N];};sizerencode(char);sizerencode(unsignedchar);sizerenco

c++ - std::move 和 unique_ptr::reset 之间有什么区别?

对于std::unique_ptr的p1和p2,std::move()有什么区别>和std::unique_ptr::reset()?p1=std::move(p2);p1.reset(p2.release()); 最佳答案 根据[unique.ptr.single.assign]/2中移动分配的标准规范,答案应该是显而易见的:Effects:Transfersownershipfromuto*thisasifbycallingreset(u.release())followedbyanassignmentfromstd::forw