最常用的部分是Boost

ham*_*mcn 114 c++ boost

当我发现boost::lexical_cast自己想到"为什么我不早点知道这件事!" - 我讨厌写代码

stringstream ss;
ss << anIntVal;
mystring = ss.str();
Run Code Online (Sandbox Code Playgroud)

现在我写

mystring = boost::lexical_cast<string>(anIntVal);
Run Code Online (Sandbox Code Playgroud)

昨天,在stackoverflow上,我遇到了boost split(另一个将节省我编写代码的宝石).

string stringtobesplit = "AA/BB-CC")
vector<string> tokens;

boost::split(tokens, stringtobesplit, boost::is_any_of("/-")); 
// tokens now holds 3 items: AA BB CC
Run Code Online (Sandbox Code Playgroud)

我要开始寻找通过Boost文档寻找其他的功能,我就可以经常使用,但我觉得,这将是很容易错过的事情.

您最常使用哪些增强功能/不想拥有?

fhe*_*fhe 62

可能对我来说最常用的提升部分是boost :: shared_ptr.

  • 也可能最被过度使用.我自己通过引用,指针容器和auto_ptr重构shared_ptr的大部分用法,从而学到了很多教训.我现在大多同意这一点:http://www.bureau14.fr/blogea/index.php/2009/08/smart-pointers-are-overused/ (13认同)
  • 在C++ 11中不再具有`std :: shared_ptr`和`std :: unique_ptr`. (4认同)

Pau*_*gar 49

BOOST_FOREACH让生活变得有价值.

(为什么没有人提到这个?8个月前问了这个问题!)

  • Eric Niebler关于"有条件的爱"的文章(http://www.artima.com/cppsource/foreach.html)描述了BOOST_FOREACH的工作原理.这太疯狂了. (15认同)
  • 不再受C ++ 11和lambdas的欢迎... (2认同)

Rob*_*Rob 34

我的喜欢没有特别的顺序:

  • 正则表达式
  • 文件系统
  • 线
  • lexical_cast的
  • program_options(太棒了!)
  • 测试(用于我所有的单元测试需求).
  • 字符串算法
  • 字符串标记器
  • 格式(类型安全的printf样式字符串格式)
  • 聪明的ptrs

当我编写我的第一个跨平台应用程序时,Boost是一个巨大的帮助 - 没有它我真的会挣扎.

  • 请更新C++ 11/C++ 14 ... (4认同)

ham*_*mcn 28

我喜欢你如何提供自己的析构函数shared_ptr.
这意味着,例如,您可以使用它FILE*并让它为您关闭文件.
例如

void safeclose(FILE*fp) {
    if(fp) {
        fclose(fp);
    }
}
void some_fn() {
    boost::shared_ptr<FILE> fp( fopen(myfilename, "a+t"), safeclose );
    //body of the function, and when ever it exits the file gets closed
    fprintf( fp.get(), "a message\n" );
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*ers 21

没人提到多指数容器,所以我会迟到.通常情况下,您不需要它们,但如果没有提升,创建等效数据结构以及效率降低真的很痛苦.我最近一直在使用它们来创建可以在2个键上查找的容器.


Hea*_*eek 20

我很惊讶没有人提到过boost::optional.除了shared_ptr和之外,我发现自己比Boost的任何部分更频繁地使用它scoped_ptr.


小智 19

没有人提到boost :: tuple?耻辱!

  • 现在可作为`std :: tuple`使用。 (2认同)

Ale*_*son 11

BOOST_STATIC_ASSERT

更新(2011年10月):C++ 11(C++ 0x)有static_assert http://www2.research.att.com/~bs/C++0xFAQ.html#static_assert

  • BOOST_MPL_ASSERT_MSG允许非常容易地读取/发现错误,这些错误比BOOST_STATIC_ASSERT提供的大小不完整类型消息更具信息性. (5认同)

Jon*_*eid 9

我最常用的一个不是Boost,而是建立在Boost之上的Adobe Source Libraries(ASL) - 特别是接受boost :: range的标准算法的扩展,而不是单独的begin/end迭代器.然后,而不是打电话,比方说,

std::for_each(some_container.begin(), some_container.end(), do_something());
Run Code Online (Sandbox Code Playgroud)

我可以简单地说

adobe::for_each(some_container, do_something());
Run Code Online (Sandbox Code Playgroud)

(我希望ASL的这些部分最终能够迁移到Boost.)


Cyr*_* Ka 8

我经常使用:

  • 提高::信号
  • 提高:: shared_ptr的
  • 提高:: lexical_cast的
  • 提高::绑定
  • 提高::随机
  • 提高::螺纹
  • 提高::不可复制

如果你正在编写一个应该在各种平台上使用的库,那么其他像Tuple,Static Assert和Integer非常有用.

像Graphs和Lambda这样的东西更具体.


D.S*_*ley 8

boost::shared_ptr是现代C++编程恕我直言的要求.这就是他们将其添加到TR1标准的原因.boost::program_options,boost::bindboost::signal是非常好的,如果你知道它们是什么,以及如何使用它们.最后两个往往会吓到新人.


Kaz*_*gon 7

我多年来一直在使用shared_ptr.它非常有用,没有理由说项目应该没有它.

最重要的是,我还使用Bind/Function/Lambda作为通用回调机制 - 在测试时特别有用 - 以及我的通用sprintf替换的格式.

最后,就在前几天,当我在愤怒中使用Variant来解决问题时(一个解析器可以使用一小组固定的无关令牌类型进行响应).解决方案非常优雅,我对它非常满意.


Kit*_*t10 7

我们发现boost :: spirit对于解析ECMAScript的业务解决方案非常有用.复杂,但非常好!


Vic*_*iba 7

我很惊讶在Boost.Thread的答案之间还没有看到.

  • 现在有`std :: thread`. (3认同)

Pau*_* II 6

使用元组迭代地图,如下所示:

string key, value;
BOOST_FOREACH(tie(key, value), my_map) { ... }
Run Code Online (Sandbox Code Playgroud)

使用boost赋值,我可以初始化这样的地图:

map<string, string> my_map = map_list_of("key1", "value1")("key2", "value2")("key3", "value3");
Run Code Online (Sandbox Code Playgroud)

使用范围适配器和管道("|")运算符,我可以向后迭代地图的值(作为示例):

BOOST_FOREACH(string value, my_multimap.equal_range("X") | map_values | reversed) { ... }
Run Code Online (Sandbox Code Playgroud)


Sad*_*per 5

你应该检查boost :: program_options.它使命令行解析更容易.


ami*_*mit 5

我使用Boost指针容器优先于shared_ptrs 的STL容器.