Tag: boost

哪个Boost特性与C ++ 11重叠?

几年前,我把C ++技巧放在架子上,现在看来,当我再次需要它们的时候,风景已经改变了。 我们现在已经有了C ++ 11,我的理解是它重叠了许多Boost特性。 是否有一些总结,其中重叠的谎言,哪些Boost库将成为传统,推荐哪些C ++ 11function使用,而不是提升,哪个更好?

libuv与Boost / ASIO相比如何?

我会对如下方面感兴趣: 范围/function 性能 到期

使用boost线程和一个非静态类函数

所以我做了一些研究,发现你可以创build一个boost :: thread对象,并通过使用“this”和boost :: bind等方法来启动一个非静态的类函数。这真的没什么意义对我来说,我可以find的所有例子都有boost :: thread对象在同一个类中作为函数启动,因此可以使用它。 然而,我正在启动另一个类的线程,所以我害怕通过使用“this”,我会说“这个”来自于我创build线程的类,而不是函数所在的类我可能是错的,我需要更多地了解这个“这个”)。 以下是我遇到问题的源代码示例。 ANNGUI.h class级ANNGUI { 私人的: boost :: thread * GUIThread; 主要* GUIMain; 上市: //创build整个GUI和所有子部分。 int CreateGUI(); } ANNGUI.cpp int ANNGUI :: CreateGUI() { GUIMain = new Main(); GUIThread = new boost :: thread(GUIMain-> MainThreadFunc); }; 这不是所有的来源,但我认为我的问题是在这里某处,我知道我必须以某种方式处理这个“这个”,但我不确定如何。 我可以使用静态函数,但我真的不想让我的variables静态。 谢谢。 另外,有什么非常好的资源使用任何boost库? 他们的网站文件似乎不错,但在我的头上。

如何使用CMake链接C ++程序和Boost

我的cmake文件应该看起来像在Ubuntu下连接我的程序与boost库吗? 运行make时显示错误: main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length' 主文件非常简单: #include <boost/program_options/options_description.hpp> #include <boost/program_options/option.hpp> using namespace std; #include <iostream> namespace po = boost::program_options; int main(int argc, char** argv) { po::options_description desc("Allowed options"); desc.add_options() ("help", "produce help message") ; return 0; } 我设法做到这一点,我已经添加到我的cmake文件的唯一线路是: target_link_libraries( my_target_file ${Boost_PROGRAM_OPTIONS_LIBRARY} )

我可以重新定义一个C ++macros,然后定义它?

我在我的代码中同时使用了JUCE库和一些Boost头文件。 Juce将“T”定义为一个macros(呻吟),Boost经常在其模板定义中使用“T”。 结果是,如果你在Boost头文件之前包含了JUCE头文件,预处理程序就会在Boost代码中扩展JUCEmacros,然后编译器就会失去希望。 在大多数情况下保持我的包含顺序并不困难,但是当你有一个JUCE类包含一些其他的类,并且链上的某个文件包含了Boost,并且它之前的任何文件需要一个JUCE包括你有麻烦。 我最初的希望在于解决这个问题 #undef T 之前任何包括提升。 但问题是,如果我不重新定义它,那么其他代码会感到困惑,“T”没有被声明。 然后我想,也许我可以这样做一些循环的#define技巧: // some includes up here #define ___T___ T #undef T // include boost headers here #define T ___T___ #undef ___T___ 丑,但我认为它可能工作。 可悲的是。 我在使用“T”作为macros的地方出现错误 '___T___' was not declared in this scope. 有没有办法使这两个库可靠地一起工作?

boost是否具有比STL更简单的set操作的数据types?

我发现C ++的STL方法做简单的集合操作非常笨重。 例如,要find两组之间的区别: std::set<int> newUserIds; set_difference(currentUserIds.begin(), currentUserIds.end(), mPreviousUserIds.begin(), mPreviousUserIds.end(), std::inserter(newUserIds, newUserIds.end())); std::set<int> missingUserIds; set_difference(mPreviousUserIds.begin(), mPreviousUserIds.end(), currentUserIds.begin(), currentUserIds.end(), std::inserter(missingUserIds, missingUserIds.end())); mPreviousUserIds = currentUserIds; boost是否提供了一个可以减less上述例子的替代类: set_type<int> newUserIds = currentUserIds.difference(mPreviousUserIds); set_type<int> missingUserIds = mPreviousUserIds.difference(currentUserIds); (类似于Qt中的QSet ,以这种方式覆盖operator- )。

为什么用户定义的移动构造函数禁用隐式的复制构造函数?

虽然我正在阅读boost / shared_ptr.hpp,我看到了这样的代码: // generated copy constructor, destructor are fine… #if defined( BOOST_HAS_RVALUE_REFS ) // … except in C++0x, move disables the implicit copy shared_ptr( shared_ptr const & r ): px( r.px ), pn( r.pn ) // never throws { } #endif 什么评论“生成的副本构造函数,析构函数是好的,除了在C + + 11,移动禁用隐式副本”的意思呢? 我们是否总是自己写复制文件来防止这种情况出现在C ++ 11中?

如何解码boost库命名?

我试图找出gd意思是提升库名,我只find另外两个人在寻找同样的东西。 我想这应该是一个地方,这是明确logging,我想find它。 mt – multithreading,用bjam threading=multi s – bjam runtime-link=static g – 使用标准和运行时支持库的debugging版本。 什么BJAM切换? d – debug bjam variant=debug 更新 我如何控制bjam开关控制上述变体? 实际上,我唯一无法辨认的就是g 。

C ++ – 将引用传递给std :: shared_ptr或boost :: shared_ptr

如果我有一个需要使用shared_ptr的函数,将它的引用传递给它是不是更有效率(所以为了避免复制shared_ptr对象)? 什么是可能的不良副作用? 我设想了两种可能的情况: 1)里面的函数副本是由参数,如在 ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp) { … m_sp_member=sp; //This will copy the object, incrementing refcount … } 2)里面的函数只是使用参数,就像 Class::only_work_with_sp(boost::shared_ptr<foo> &sp) //Again, no copy here { … sp->do_something(); … } 在这两种情况下,我都看不到通过值而不是引用传递boost::shared_ptr<foo>的好理由。 按值传递只会“暂时”增加由于复制引起的引用计数,然后在退出函数范围时将其递减。 我可以俯视吗? 为了澄清,在阅读了几个答案之后,我完全赞同过早优化的问题,而且我总是试图首先在那个热点上工作。 如果你明白我的意思,我的问题更多的来自纯技术的代码观点。

通过引用或值的shared_ptr?

当一个函数需要一个shared_ptr (来自boost或C ++ 11 STL)时,你是否传递它 通过const引用: void foo(const shared_ptr<T>& p) 或值: void foo(shared_ptr<T> p) ? 我宁愿第一种方法,因为我怀疑它会更快。 但是,这真的值得吗?还是还有其他问题? 请给出你select的理由或者如果是这样的话,为什么你认为这没有关系。