草庐IT

boost-container

全部标签

c++ - 如何将 boost::shared_ptr<> 变成引用 (&)?

所以我有一个类使用引用(&)和类似的函数voidrequest(tcp::socket&socket);我开始将所有代码迁移到boost::shared_ptr但我真的很想知道如何将我的shared_ptr转换为引用,以便能够使我的代码一个函数一个函数地演化,而不是在一次迭代中将我所有的代码都更改为shared_ptr。那么如何将shared_ptr变成引用呢? 最佳答案 首先,它们不叫链接,而是引用。:)其次,boost::shared_ptr可以像普通指针一样取消引用:boost::shared_ptrp(newtcp::soc

c++ - boost zip 迭代器和 std::sort

我有两个长度相同的数组values和keys。我想使用keys数组作为键对values数组进行按键排序。有人告诉我,boost的zip迭代器是将两个数组锁定在一起并同时对它们执行操作的正确工具。这是我尝试使用boost::zip_iterator来解决无法使用gcc编译的排序问题。有人可以帮我修复这段代码吗?问题出在线路上std::sort(boost::make_zip_iterator(keys,values),boost::make_zip_iterator(keys+N,values+N));#include#include#include#include#include#in

c++ - boost 多数组维度

我有一个Boost多数组,其维度是在运行时根据用户的输入设置的。我现在想通过x,y,z组件遍历该数组。如果这是一个std::vector,我会使用:for(inti=0;i或者可能是某种迭代器。如何获取多数组维度的数值?如何遍历多数组?谢谢! 最佳答案 您可以使用shape()以一种不那么复杂的方式:#include#include#includeintmain(){boost::multi_arraya(boost::extents[3][5]);for(size_tx=0;x(查看实际效果oncoliru)

c++ - 如何有效使用Boost的intrusive_ptr?

手动取消引用我对Boost的侵入式指针有疑问。这是booleanconversionoperator检查x.get()!=0.但是,下面的代码在标记点失败。为什么会这样?我猜我可能与deletedoesnotsetapointerto0这一事实有关(或nullptr)。如果不是这样,我怎么能有效地使用侵入式指针呢?我希望能够像常规指针一样使用侵入式指针,例如,在表达式x&&x->foo()中,但这个人工制品似乎排除了它。#include#includestructT{T():count(0u){}size_tref_count(){returncount;}std::atomic_si

c++ - Boost:在单独的加载/保存函数中非侵入式地序列化一个类

我目前正在从事一个软件项目,该项目需要对象持久性作为其实现的一部分。乍一看,boost序列化库似乎非常适合这项工作,但现在我已经尝试使用它,我开始认真地质疑它的整体设计。库希望用户为用户想要序列化的每个类定义一个序列化方法。classObject{private:intmember;public:templatevoidserialize(Archive&ar,constunsignedintversion){ar&member;}};如果所讨论的类具有属于其他第三方库和API的成员对象,则会出现问题。尽管我碰巧使用的那些都在zlib许可下可用,但修改库头感觉不对。但是开发人员已经想到

c++ - 如何在 boost 程序选项中有一个可选的选项值?

我正在使用Boost程序选项,我想提供一个具有三种方式的选项:如果没有定义如果已定义但没有值如果定义了一个值例如,我有一个程序可以处理诸如a.jpg之类的文件,我想为用户提供能够在以下场景中使用它的功能:myapp.exea.jpg:processjpegmyapp.exea.jpg-e:processjpegandgeneratereportatthesamedirectoryasa.jpgmyapp.exea.jpg-ec:\tmp\:processjpegandgeneratereportatc:\tmp\如何使用Boost程序选项执行此操作? 最佳答

c++ - 使用 boost::iterator

我写了一个稀疏vector类(参见#1、#2。)我想提供两种迭代器:第一个集合,即常规迭代器,可以指向任何元素,无论是已设置还是未设置。如果它们被读取,它们返回设置值或value_type(),如果它们被写入,它们创建元素并返回左值引用。因此,它们是:随机访问遍历迭代器和可读和可写迭代器第二个集合,稀疏迭代器,只迭代集合元素。由于它们不需要懒惰地创建写入的元素,因此它们是:随机访问遍历迭代器和可读和可写和左值迭代器我还需要两者的const版本,它们是不可写的。我可以填空,但不确定如何使用boost::iterator_adaptor开始。这是我目前所拥有的:templateclasss

c++ - 用 boost spirit 解析一对整数

我有以下代码:std::stringtest("1.1");std::paird;boolr=qi::phrase_parse(test.begin(),test.end(),qi::int_>>'.'>>qi::int_,space,d);所以我试图解析字符串test并将结果放在std::paird中。但是它不起作用,我怀疑它与CompoundAttributeRules有关.关于如何让它工作的任何提示?编译错误如下:error:nomatchingfunctionforcallto'std::pair::pair(constint&)' 最佳答案

c++ - 如果函数指针不需要 & 符号,为什么 boost::bind 需要一个?

我一直认为函数指针不需要&符号:Dofunctionpointersneedanampersand然而,我看到的每个使用boost::bind的例子都显示了一个,并且我的编译器-在大多数情况下-如果它被省略会给出一个通常难以理解的错误消息。synchronize(boost::bind(&Device::asyncUpdate,this,"ErrorMessage"));//Workssynchronize(boost::bind(Device::asyncUpdate,this,"ErrorMessage"));//Fails我假设boost::bind的第一个参数基本上是函数指针是

c++ - 如何将 std::string 放入 boost::lockfree::queue (或替代方案)?

我正在尝试输入std::string进入boost::lockfree::queues以便我的线程可以使用新数据相互更新。当我尝试使用boost::lockfree::queueupdated_data;时,g++说:Ininstantiationof'classboost::lockfree::queue>':error:staticassertionfailed:(boost::has_trivial_destructor::value)error:staticassertionfailed:(boost::has_trivial_assign::value)我去过showngen