30

私は、Boost ライブラリのリビジョン 1.38.0 を閲覧して、会社の外部ソフトウェア承認プロセスの交渉を正当化するのに十分な宝石があるかどうかを判断しようとしました。テスト プログラムを作成し、ドキュメントを読む過程で、いくつかの結論に達しました。

  • もちろん、Boost のすべてが私のエンジニアリング グループで役立つわけではありません。
  • さらに重要なことに、これらのライブラリのいくつかは、他のライブラリよりも洗練されているように見えます

実際、一部のライブラリは、私には少しおもちゃのように思えます。

boost::variantなど、短期間の調査で使用できるかなりアクセスしやすいライブラリがいくつかあります(ビジターコンポーネントと、ビジターに演算子がない場合にコンパイラがバーフするという事実が本当に気に入っています)バリアント型の 1 つ)。私たちのグループにはすでに一連のスマート ポインター型があるという事実を除いて、boost::shared_ptrを使用します。

そのため、Stack Overflow ユーザーの幅広い経験に基づいて、Boost ライブラリ

  • 高品質ですか?
  • おもちゃ以上のものですか?
  • 参入障壁が高いが、学ぶ価値のあるものはありますか?

これは、有害と見なされる Boostで提起された質問とは多少異なることに注意してください。

PS - (litb からの) 回答の 1 つが削除されましたか? ここでは見ることができず、私のユーザーページには抜粋しかありません...

4

11 に答える 11

19

私はかなり頻繁に使用します(そして、それは私の人生をよりシンプルにします):

  • スマート ポインター ( shared_ptrscoped_ptrweak_ptr、インタープロセスunique_ptr):

    • scoped_ptr基本的な RAII (所有権の共有と所有権の譲渡なし) は無料です。
    • shared_ptrより複雑な操作の場合 - 所有権の共有が必要な場合。ただし、多少の費用はかかります。
    • unique_ptrunique_ptr-ムーブ エミュレーションとのさまざまなアプローチ (Boost に存在) を統合するための Boost でのアクティブな作業があります。
    • それらは非常に使いやすく (ヘッダーのみ)、習得が容易で、非常によくテストされています (まあ、おそらく を除いてunique_ptr)
  • Boost Thread - スレッドを操作するための積極的に開発された (スレッドは移動可能になりました) ライブラリ。特定のプラットフォームでのスレッド実装の複雑さを隠します。

  • Boost MPL と Fusion - これらは説明が難しいです。長い間、私はコンパイル時のパワーを使用していませんでしたが、いくつか読んで学習した後、コードの一部をうまく単純化できることがわかりました。それでも、コンパイル時間に注意してください...

  • ブーストアジア

    • 最初の印象 (少なくともしばらく前) とは対照的に、ネットワーク ライブラリだけではありません。これは、事実上あらゆるものに使用できる非同期 I/O モデルを提供します。
  • Boost Format (強力な出力フォーマットですが、非常に重い)

  • ブースト Spirit2x (特定の文法に基づいて解析と出力の生成の両方に使用される Karma と Qi)。非常に強力で、外部ツールに頼らずにパーサーを作成できます。ただし、コンパイル時間は問題になる可能性があります。また、バージョン 2x は活発に開発されており、ドキュメントはかなり不足しています (ただし、spirit-devel メーリング リストは非常に役立ちます)。

  • Bind、Function、Lambda をブーストして生活を楽にし、Boost Phoenix を試してみてください

  • lexical_cast (boost::stringで近いうちに似たようなものが生まれるかもしれません)

  • Regex/Xpressive - 正規表現

  • 型の特性と概念のチェック - あなたの人生を楽にするためにもう一度

  • 算数:

    • さまざまな乱数発生器
    • さまざまな統計分布
    • ublas - C++ のような方法で LAPACK/BLAS バインディングを使用するため
    • 通常、C++ では使用できないいくつかの数学関数
    • 数値型間の変換を制御するためのツール
    • 区間演算
  • Boost Iterator (独自のイテレーターとファサードを作成するための特殊なアダプター)

  • Boost Unit Testing フレームワーク

そして、Boost でほとんど触れていない部分がまだいくつかあります。おそらく、いくつかの明白なものについて言及するのを忘れていました。

適切な問題 (釘) には適切なツール (ハンマー) を使用することを忘れないでください。ソリューションをシンプルにすることを忘れないでください。受け取った機能のコストについて覚えておいてください (たとえばshared_ptrboost::format実行時のオーバーヘッドや MPL/Fusion/Spirit/Phoenix のコンパイル時間のコストと実行可能ファイルのサイズなど)。しかし、実験して学びましょう - そこが楽しいところです。

また、経営陣に新しいライブラリを使用するよう説得する場合、すべてのライブラリから始める必要はありません。簡単なことから始めて (おそらく、長く安定した Boost の歴史があり、幅広いコンパイラ サポートがあり、TR2/C++1x に含める予定があるものなど)、利点を示す簡単な例から始めます。

于 2009-02-23T18:17:13.280 に答える
13

クロスプラットフォーム (例: *nixとboostwin32 ) のマルチスレッド アプリ ( , .)設計するとき、これだけでも、私の雇用主のプロジェクトの一部として採用するのに十分な理由がありました。boost::threadboost::interprocessboost

残り(コンテナ、ジェネリックプログラミングとメタプログラミング、メモリ)は景品として続きました。

于 2009-02-23T17:24:55.620 に答える
8

をよく使いますboost::filesystem。シンプルなファイル管理に必要なすべてを行います

于 2009-02-23T17:22:04.473 に答える
6

貴重なライブラリは次のとおりです。

  • メタプログラミング (MPL, enable_if, type/function_traits)
  • プリプロセッサ - 必要な場合は便利です
  • バリアント、オプション-すでに述べたように
  • 数学 - クォータニオン、追加の数学関数 (ただし、役に立たないかもしれません)
  • ラムダ: 構文は毛むくじゃらですが、かなり中毒性があります
  • 演算子/イテレータ: 独自の型を構築するときに非常に便利です

おそらくPython(試したことはありませんが、KDEプログラムなどで使用されているものもあります)

于 2009-02-23T17:23:08.980 に答える
5

共有メモリなどを使用している場合、プロセス間のブーストは間違いなく価値があります。

于 2009-02-23T17:23:04.470 に答える
4

Boost::lambda は、STL を使用する場合に多少役立ちます。次のように、その場で述語を作成できます。

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

このコードは、スペースで区切られたコンテナーからすべての要素を出力します。

于 2009-02-23T17:18:00.147 に答える
4

C++0x 標準ライブラリへの追加の多くは、Boost ライブラリの一部として最初に作成されました。

それらは完璧ではありませんが (どのソフトウェアでも)、使用されるエンジニアリング プロセスはかなり堅牢です (ほとんどのフリー ソフトウェアよりもはるかに優れています)。ヘルプが必要な場合は、メーリング リストで多くの情報を見つけることができます。

于 2009-02-23T17:18:16.183 に答える
4

個人的には、スレッド、ipc、メモリ マップ ファイル、ファイル システム、非同期 IO などのプラットフォーム固有のものを隠すライブラリを確認する必要があると思います。

これらは、マルチ プラットフォーム プロジェクトで多くの時間と手間を節約でき、派手な C++ 機能の演習ではなく、機能の公開に集中する傾向があります。

于 2009-02-23T17:24:49.410 に答える
4

単純なキーと値のペアよりも複雑なテキスト ファイルを解析する必要がある場合は、Boost::spiritを強くお勧めします。習得には時間がかかりますが、一度理解すれば、EBNF グラマーをコードに簡単に埋め込むことができます。独自のパーサーを作成するよりもはるかに堅牢です。また、構文解析コードの作成者よりも、ファイルの作成者が使いやすいように設計されたファイル形式を作成していることにも気付きました。

于 2009-02-23T17:28:25.067 に答える
2

他の回答を読みました。Boost.Graph(BGL)とその友人であるBoost.Property_mapを追加する必要があります。これらの2つは文字通り私の日常の仕事を変えました。

それは非常によく設計されていますが、すべての概念の目的を実際に理解する前に支払うべきかなり高い代償があるため、ほとんどの人は最初は延期されます。しかし、このライブラリを理解すると、それなしではいられなくなります!

于 2009-02-24T07:19:25.600 に答える
2

クライアント/サーバー アプリケーションを作成するには、boost.thread と boost.asio が不可欠であることがわかりました。スマート ポインター ライブラリを使用すると、メモリ リークなしで例外処理を使用するコードを簡単に記述できます。

余談ですが、一般的なブースト ライブラリのいくつかを文書化した一連の PDF ファイルが最近リリースされました。それらはSourceForgeからダウンロードできます。

于 2009-02-23T17:36:20.943 に答える