草庐IT

boost-type-erasure

全部标签

c++ - 如何创建一个隐藏多层 vector 并将其公开为单个范围的 Boost.Range?

我有一个无法修改的遗留类层次结构。由于外部库的要求,我需要为Line和Ring定义Boost.Ranges,其中两者都只在一次运行中公开点(即对于Line和Ring,它应该是一个Boost.RangeofPoints).伪代码来说明:Linel1=Line{{1.0,2.0},{3.0,4.0},{5.0,6.0}}//initLinewiththreePointsLinel2=Line{{7.0,8.0},{9.0,10.0},{11.0,12.0}}//initLinewiththreePointsautolit=boost::begin(l1);//pointstothePoin

c++ - 警告 C4180 : qualifier applied to function type has no meaning; ignored

我已经设置了编译器/Za选项来禁用语言扩展,以便编译器严格使用标准ISOC++。这是我收到以下警告的示例接口(interface)类warningC4180:qualifierappliedtofunctiontypehasnomeaning;ignored这是关于函数返回类型中的const限定符,如果我删除const,警告就会消失,但我不想这样做,我想重新启用lanqage扩展。我的问题是:这个警告合理吗?如果不是,那么我将使用pragma禁用警告,但在此之前我想确保此警告是“误报”因为下面的类是正确的ANSIISOC++不是吗?所以警告应该被禁用?classIBet{public:

c++ - 使用boost编译时出错

我写的项目使用,我添加了include目录到AdditionalIncludedirectories,和lib链接器的文件夹。但是当我尝试构建解决方案时,出现错误:Error1errorLNK1104:cannotopenfile'libboost_thread-vc100-mt-sgd-1_50.lib'我在lib目录中搜索了这个文件,但是在lib目录中没有这个名字的文件。我找到了名称相似的文件libboost_thread-vc100-mt-gd-1_50.我做错了什么? 最佳答案 您的问题似乎与thisquestion中的问题

c++ - 如何使用 boost::fs 只加载 30 个最新文件而不是整个目录?

刚开始使用boost。使用它来加载图像集合。问题是文件夹中的图像数量会继续增加,我最终不想将它们全部添加到我的显示程序中。我在OSX上使用C++。如何调整此示例代码以仅加载目录顶部或底部的30张图像?只加载最新的文件会很棒,但我会满足于只改变它。不幸的是,在我的循环中只是说(it示例代码:fs::pathpPhoto(photobooth_texture_path);for(fs::directory_iteratorit(pPhoto);it!=fs::directory_iterator();++it){if(fs::is_regular_file(*it)){//--Perhap

c++ - boost shared_ptr的底层设计

我想了解boostshared_ptr类的底层设计。我想将它“移植”到fortran(不要问)。我理解的一件事是引用计数由shared_count类持有。这提示了我一个问题。很久没用过C++了,也没用过boost。假设我分配了一个类X的实例,然后将它传递给两个不同的shared_ptr实例。据我了解,每个shared_ptr实例对另一个实例一无所知,因此两个shared_ptr实例都引用同一个X实例,同时保持引用计数为1。如果一个shared_ptr超出范围而另一个不超出范围,则X对象将被删除(因为引用计数降为零)并且剩余的shared_ptr将有一个悬空指针。为了保持shared_p

c++ - boost::atomic 的 header 是什么

我想使用boost::atomic但要包含什么header?没有boost/atomic.hpp 最佳答案 Boost.Atomic目前还不是boost的官方部分。如果您仍想使用它,则需要从here获取它。.或者你可以试试Boost.Interprocess对于原子操作,依赖编译器相关扩展,如gccs原子操作(__sync_val_compare_and_swap等),或者,如果c++11是一个选项,请使用std::atomic,这几乎与boost::atomic相同IIRC.编辑:一如既往,这些事情发生了变化:Boost.Atom

c++ - Boost bind 和 boost function,将带有参数的函数存储在一个 vector 中,然后执行它们

抱歉标题措辞不当。我一直在查看文档,但找不到任何可以解决我所遇到的问题的方法。基本上我想存储几个function1,在vector中提供参数,然后在稍后阶段执行它们。这就是我想要完成的:typedefboost::function1Task;VectormScheduledTasks;intMyArg=5;voidSomeTask(void*arg){//....}voidAddSomeTasks(){//nevermindthatMyArgisgloballyaccessiblefor(inti=0;i现在执行task()它要我传递一个参数,但我在AddSomeTasks中传递了它?

c++ - 迭代器声明 : "does not contain a type"

我很难理解为什么会收到此错误。我指的是Josuttis的STL书和其他资源,看来我在下面声明我的迭代器的方式应该有效:#ifndefLRU_H#defineLRU_H#include#includeclassLRU{public:LRU();//defaultconstructorLRU(int);//constructorwithargument~LRU();//destructor//Methods//voidenqueue(int);//adddatumtothequeuevoiddequeue();//removedatumfromthequeuevoidreplace();/

c++ - boost::regex 和 std::regex 之间的不一致

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Nomatcheswithc++11regex我之前使用boost::regex来处理一些东西,而对于一些我想使用std::regex的新东西,直到我注意到以下不一致-所以问题哪个是正确的?#include#include#include#includevoidtest(std::stringprefix,std::stringstr){std::stringpat=prefix+"\\.\\*.*?";std::cout对我来说(gcc4.7.2,-std=c++11,boost:1.51),我看到了以下内

c++ - 'mapped_type' std::map 错误的初始化没有匹配的构造函数

我有一个名为“Card”的类,我试图将它的一些对象存储在std::map中卡片.hpp:classCard{public:enumValueType{NOVALUE,ACE};enumFaceType{NOFACE,CLUBS};Card(constValueType&_value,constFaceType&_face);Card(constCard&_card);private:ValueTypem_value;FaceTypem_face;};以下是我存储和访问它的方式:甲板.hpp:#includeclassCard;classDeck{public:Deck();std::s