Tag: boost

是否有可能使用boost :: foreach和std :: map?

我发现boost :: foreach非常有用,因为它节省了我很多的写作。 例如,假设我想打印列表中的所有元素: std::list<int> numbers = { 1, 2, 3, 4 }; for (std::list<int>::iterator i = numbers.begin(); i != numbers.end(); ++i) cout << *i << " "; boost :: foreach使上面的代码更加简单: std::list<int> numbers = { 1, 2, 3, 4 }; BOOST_FOREACH (int i, numbers) cout << i << " "; 好多了! 然而,我从来没有想出一个方法(如果可能的话)使用它的std::map s。 该文档只有像vector或stringtypes的例子。

unique_ptr相当于boost吗?

在boost库中有一些C ++ 1x的std :: unique_ptr的等价类吗? 我正在寻找的行为是能够有一个exception安全的工厂function,像这样… std::unique_ptr<Base> create_base() { return std::unique_ptr<Base>(new Derived); } void some_other_function() { std::unique_ptr<Base> b = create_base(); // Do some stuff with b that may or may not throw an exception… // Now b is destructed automagically. } 编辑:现在,我正在使用这个黑客,这似乎是最好的,我可以在这一点上… Base* create_base() { return new Derived; } void some_other_function() { boost::scoped_ptr<Base> b = […]

boost :: noncopyable的优点是什么?

为了防止拷贝一个类,你可以很容易地声明一个私有拷贝的构造函数/赋值操作符。 但是你也可以inheritanceboost::noncopyable 。 在这种情况下使用boost有什么优点/缺点?

空指针与boost :: shared_ptr?

什么是相当于以下内容: std::vector<Foo*> vec; vec.push_back(NULL); 当处理boost::shared_ptr ? 它是下面的代码? std::vector< boost::shared_ptr<Foo> > vec; vec.push_back(boost::shared_ptr<Foo>()); 注意:我可能推回很多这样的对象。 我应该在哪里声明一个全局静态的nullPtr对象? 那样只有其中一个必须被修build: boost::shared_ptr<Foo> nullPtr;

使用属性树在Boost中创buildJSON数组

我正在尝试使用boost属性树创build一个JSON数组。 该文档说:“JSON数组映射到节点。每个元素是一个空名称的子节点。 所以我想创build一个名称为空的属性树,然后调用write_json(…)来获取数组。 但是,文档不告诉我如何创build未命名的子节点。 我试过ptree.add_child("", value) ,但是这样会产生: Assertion `!p.empty() && "Empty path not allowed for put_child."' failed 文件似乎没有解决这一点,至less不以我能想出的任何方式。 谁能帮忙?

如何在Android NDK和STLport中使用boost库(包括shared_ptr)

这不仅仅是一个答案,而是一个问题,因为我已经弄明白了,至less就整个库的编译而言。 主要的问题是让shared_ptr工作。 配料: Boost v。1.45.0 STLport的版本在http://www.anddev.org/viewtopic.php?p=29939 。 NDK的版本r4b。 路线: 在你的Android.mk文件中添加: LOCAL_CFLAGS += -DBOOST_EXCEPTION_DISABLE -D_STLP_NO_EXCEPTIONS -DOS_ANDROID -D_STLP_USE_SIMPLE_NODE_ALLOC 在stlport / stl / _string.h的第613行删除对__stl_throw_length_error的调用。 如果你喜欢,你可以使用_STLP_NO_EXCEPTIONS。 在第261行后面编辑boost / boost / smart_ptr / shared_ptr.hpp,以免在shared_ptr构造函数中调用boost :: throw_exception。 我在方法的整个主体周围使用了#ifndef BOOST_EXCEPTION_DISABLE。 (但请参阅下面的答案。) 接下来,你需要提供一些缺失的部分。 使用以下命令创build一个头文件: #ifdef OS_ANDROID #include <exception> namespace std { struct bad_alloc : public exception { bad_alloc operator()(){}}; } #endif 和一个带有精简exception类的源文件来支持bad_alloc: #ifdef […]

我应该从使用boost :: shared_ptr切换到std :: shared_ptr?

我想用-std=c++0x在GCC中启用对C ++ 0x的支持。 我并不一定需要GCC 4.5(和4.6版本)中目前支持的C ++ 11特性 ,但我想开始习惯它们。 例如,在我使用迭代器的一些地方, autotypes会很有用。 但是,我不需要任何当前支持的function。 这里的目标是鼓励我将新标准的特征融入到我的编程“词汇”中。 从你所了解的C ++ 11的支持中,在GCC中启用它是一个好主意,然后通过例如从使用boost::shared_ptr到std::shared_ptr ,混合? PS:我知道这个比较不同风格的shared_ptr 好问题 ,但是我要求在标准最终确定之前就要使用哪个更高层次的build议。 另外一种方法是,像GCC这样的编译器说它支持“实验性function”,这是否意味着在编译期间我可能会遇到奇怪的错误,这将是主要的时间和StackOverflow的隐藏问题的来源? 编辑 :我决定从std::shared_ptr切换回来,因为我不相信它在GCC 4.5中的支持, 如在这个问题中的示例所示 。

C ++ 11 std :: bind和boost :: bind之间的区别

两者有什么区别? 或者我安全地replace每一个boost::bind的std::bind在我的代码中,从而消除对Boost的依赖?

使用Boost库程序选项的必需和可选参数

我正在使用Boost程序选项库来parsing命令行参数。 我有以下要求: 一旦提供“帮助”,所有其他选项都是可选的; 一旦“帮助”没有提供,所有其他选项是必需的。 我如何处理这个? 这是我的代码处理这个,我发现它是非常多余的,我认为必须有一个容易做的,对吧? #include <boost/program_options.hpp> #include <iostream> #include <sstream> namespace po = boost::program_options; bool process_command_line(int argc, char** argv, std::string& host, std::string& port, std::string& configDir) { int iport; try { po::options_description desc("Program Usage", 1024, 512); desc.add_options() ("help", "produce help message") ("host,h", po::value<std::string>(&host), "set the host server") ("port,p", po::value<int>(&iport), "set the server port") ("config,c", […]

`const shared_ptr <T>`和`shared_ptr <const T>`之间的区别?

我正在写一个C ++的共享指针的访问器方法,如下所示: class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr<Bar> m_bar; } 所以为了支持getBar()的const性,返回types应该是一个boost::shared_ptr ,它可以防止修改它指向的Bar 。 我的猜测是shared_ptr<const Bar>是我想要返回的types,而const shared_ptr<Bar>会阻止指针本身的重新分配指向不同的Bar但允许修改它指向的Bar 。但是,我不确定。 我会很感激,如果有人知道肯定可以证实这一点,或纠正我,如果我错了。 谢谢!