草庐IT

boosting

全部标签

c++ - 将 gcc 构建的 Boost 链接到英特尔 C++ 编译程序时静态初始化期间的段错误

我有一个Ubuntu13.04系统,安装了最新的SVN版本的BoostC++库。Boost安装是使用系统的nativegcc版本v4.7.3构建的。我非常广泛地使用Boost,当我使用gcc编译时它工作得很好;我已经使用了其中的许多,包括Boost.Thread(我将在下面详细讨论),没有任何问题。如果我尝试使用与已安装的Boost库链接的英特尔C++编译器(我个人使用v13.x系列中的几个不同版本)构建程序,就会出现问题。当我这样做时,程序启动后立即出现段错误;它似乎发生在Boost.Thread库的静态初始化期间。这是一个简单的示例程序:#include#includeintmai

c++ - 在 1_54 中破坏了 boost 变体?

我认为Boost::variant在1_54中被破坏了。我正在尝试将std::unique_ptr用作boost变体中的有界类型。根据1_54文档,变体需要可复制构造或可移动构造。http://www.boost.org/doc/libs/1_54_0/doc/html/variant/reference.html所以我在我的代码中实现了移动构造函数并禁用了复制构造函数。当我尝试将某些内容分配给变体对象时,它无法编译。我尝试了各种不同的方法,包括使用std::move将数据分配给变体对象,但似乎没有任何效果。根据编译错误堆栈跟踪,我确定问题出在variant.hpp中,它试图备份rhs

c++ - Phoenix::bind for C++11 lambdas in boost::spirit::qi 语义 Action

我的目标是创建一个解决方法,以便我可以在BoostSpiritQi语义操作中使用C++11lambda,同时仍然可以访问更多扩展的qi占位符集,例如qi::_pass或qi::_r1,而无需从上下文对象中手动提取它们。我希望避免为一些重要的解析逻辑编写Phoenixlambda,而更喜欢C++11lambda中可用的更直接的C++语法和语义。下面的代码代表了我对解决方法的想法。我的想法是使用phoenix::bind绑定(bind)到lambda并将我需要的特定占位符传递给它。但是,我遇到了一个非常长的模板化编译器错误(gcc4.7.0,Boost1.54),我没有解释的专业知识。我选

c++ - 将 boost::shared_ptr 与重载下标运算符 ([]) 的类一起使用

我有一个重载下标运算符的类:classSomeClass{public:int&operator[](constintidx){returnsomeArray[idx];}private:intsomeArray[10];};这当然允许我像这样访问someArray成员的数组元素:SomeClassc;intx=c[0];然而,一些SomeClass的实例将被包裹在一个boost共享指针中:boost::shared_ptrp(newSomeClass);但是,为了使用下标运算符,我必须使用更冗长的语法,这种语法破坏了下标运算符重载的简洁性:intx=p->operator[](0);

c++ - 需要 Boost Pool 经验。作为预分配的分配器有用吗?

最近我一直在寻找一个池/分配器机制。BoostPool似乎提供了解决方案,但仍有一些东西无法从文档中推断出来。需要分配什么几个小类(~30个字符)std::map(我想确保它不会自己执行动态分配器)在pugi::xml中分配标准::字符串如何控制分配的地址空间(或数量)object_pool似乎提供了一种分配需求的好方法1)但是,它想为分配器设置一个固定大小以供使用。默认情况下,它会自己获取内存。如果可能的话,我想给它一个它可以在其中播放的地址空间。char*mem_for_class[1024*1024];boost::object_poolq;或:constintmax_no_ob

c++ - boost::variant for boost::arrays of arbitrary size

我想本着的spirit创建一个boost::varianttypedefboost::variant,boost::array,boost::array,...>any_int_array;泛化为N作为模板的第二个值。换句话说,一个包含任意大小数组的boost::variant。这可能吗?请注意,在上面的示例中,boost::array是我的案例之一,但对于采用单个int的任何类,它都需要是一个可行的解决方案值作为模板参数。 最佳答案 既然你在谈论具有静态已知容量的类型,你就不能用一些模板元编程来解决这个问题吗?LiveonColi

c++ - Qt 相当于 boost::ptr_vector?

我需要一个拥有指针所有权的指针容器——即当一个元素被删除,或者容器超出范围时,它会释放所有指针,就像在boost::ptr_vector中一样。.QList>不起作用(编译错误,没有复制构造函数?)。现在我正在使用QList>,但它的引用计数和用于多线程的昂贵互斥体感觉有点矫枉过正。编辑:我刚刚了解到QPtrList(感谢@ForEveR)这在Qt3中非常等效,但已从更高版本中删除。我只是不明白他们为什么要删除它。 最佳答案 您是对的,由于上述原因,QSharedPointer有点开销。不幸的是,Qt中没有这样的指针vector,当

c++ - 是否有 BOOST 池固定大小的分配器?

我要创建unordered_map(因为我特别想要一个HashMap)。我想在开始时分配它的最大大小(根据我的限制)。因此,如果我要分配256个条目,并且每个条目的大小为1B(只是一个例子。假设1Byte包括Key和Value)。那么我的总大小unordered_map键+条目是256B。我想在分配器中预分配256B。然后,当unordered_map会调用allocate()/deallocate(),allocator将从已经分配的内存中给它1B。typedefboost::unordered::unordered_map,std::equal_to,???>>myMap它存在于B

c++ - boost 日志问题,版本 1.59

以下代码在boost1.57中按预期工作:#include#includestructFoo{intd=1;};std::ostream&operator在boost1.59中,相同的代码失败了。第一个gcc错误消息是:error:nomatchfor‘operator文档和发行说明都没有记录需要更改的内容。 最佳答案 Liveversion看起来问题出在enable_if_formatting_ostream中结构。它是在thiscommit中添加的.看起来像templatestructenable_if_formatting_o

python - boost::python:将 C++ 类暴露给嵌入在 C++ 应用程序中的 python 脚本

我在C++应用程序中使用boost::python成功加载了一个python脚本文件并调用了一个函数。在boostpython中EmbeddingPythonwiki上有关于howtoloadapythonmodule的提示.namespacebp=boost::python;bp::objectimport(conststd::string&module,conststd::string&path,bp::object&globals){bp::dictlocals;locals["module_name"]=module;locals["path"]=path;bp::exec("