C ++ Boostライブラリを使用する利点は何ですか?[閉まっている]


122

だから、私はずっと読んでいて、Boostライブラリーは実際に(私の店ではなく)多く使われているようです。どうしてこれなの?そして、何がそんなに素晴らしいのですか?


10
Nitpick:頭字語ではないので、ブースト(またはブースト)であり、ブーストではありません。もちろんあなたが叫んでいるのでない限り;)
Niklas

10
@Niklasプリプロセッサマクロのいずれかを使用している場合もBOOSTです= P
KitsuneYMG

@KitsuneYMGとにかく質問が編集されたようですが、OPがプリプロセッサコードの編集に質問フィールドを使用していなかったと確信しています;)
Niklas

3
@Nikias私はただのろくでなし= Pです。男には趣味が必要だ。
KitsuneYMG、

C ++はBoostなしではがらくたです:)
TriCore 2016年

回答:


134

次の理由により、Boostは非常に幅広く使用されています。

  • オープンソースであり、ピアレビュー済みです。
  • これは、STLにはなかった幅広いプラットフォームにとらわれない機能を提供します。
  • これは、置換ではなくSTLを補完するものです。
  • Boost開発者の多くはC ++標準委員会に所属しています。実際、Boostの多くの部分は、次のC ++標準ライブラリに含まれると考えられています。
  • うまく文書化されています。
  • そのライセンスにより、オープンソースおよびクローズドソースのプロジェクトに含めることができます。
  • その機能は通常相互に依存していないため、必要な部分のみをリンクできます。【Luc Hermitteのコメント】

5
さらに、boostサブライブラリは互いに独立して使用できると言えます(いくつかのコアライブラリを除く)。例えばboost.ublasを使用する必要があるのは、boost.shared_ptrを使用しているからではありません。
Luc Hermitte、

百科事典のエントリのように見える回答を見るのが大好きです。大量の材料を簡単に入手できます。+1
タイラー・スミス

全体として、すべてのライブラリはMPLに依存しているようです...
Viktor Sehr

Boostは1回の書き込みを可能にし、クロスプラットフォームの開発と使用法は正しいですか?
FilBot3 2014年

商用利用は無料ですか?
Mayur

39

ホームページから:

「...世界で最も高く評価され、専門的に設計されたC ++ライブラリプロジェクトの1つ。」— Herb SutterおよびAndrei Alexandrescu、C ++コーディング標準

「項目55:Boostをよく理解してください。」— Scott Meyers、Effective C ++、第3版。

「ほとんどのプログラマーにとって明白な解決策は、必要なサービスに依存しないエレガントで効率的なプラットフォームを提供するライブラリーを使用することです。例はBOOST ...です。」— Bjarne Stroustrup、抽象化、ライブラリー、およびC ++での効率

それで、それは広く使われ、受け入れられているライブラリの範囲ですが、なぜそれが必要なのでしょうか?

必要な場合:

  • 正規表現
  • 関数バインディング
  • ラムダ関数
  • 単体テスト
  • スマートポインター
  • コピー不可、オプション
  • 連載
  • 一般的な日付
  • ポータブルファイルシステム
  • 循環バッファ
  • 設定ユーティリティ
  • 汎用画像ライブラリ
  • TR1
  • スレッド
  • uBLAS

C ++でコーディングする場合は、Boostご覧ください。


23

それらは標準ライブラリに多くの不足しているものを追加するため、それらの多くは標準に含まれています。

後押しの人々は嘘をついていません:

組織はなぜBoostを使用する必要があるのですか?

つまり、生産性。Boostのような高品質のライブラリを使用すると、初期開発が迅速になり、バグが減り、再発明を減らし、長期的なメンテナンスコストを削減できます。また、Boostライブラリーは事実上のまたは適切な標準になる傾向があるため、多くのプログラマーはすでにそれらに精通しています。

10個のBoostライブラリがC ++標準ライブラリのTR1に含まれているため、後で完全に標準化される予定です。より多くのBoostライブラリがTR2のパイプラインにあります。Boostライブラリを使用することで、組織は新しいテクノロジーを採用する際に有利なスタートを切ることができます。

Adobe Acrobat Reader 7.0など、多くの組織がすでにBoostで実装されたプログラムを使用しています。


16

いくつかのBoostクラスは非常に便利です(shared_ptr)。ただし、Boostの特性と概念は少し変わっています。テンプレートを多用するコードの場合と同様に、コンパイル時間と巨大なバイナリサイズはBoostで完全に狂っています。バランスが必要です。Boostがそれを見つけたかどうかはわかりません。


10
Boostは1つのライブラリではなく多くのライブラリであることを忘れます。さらに、機能に対して大きなサイズとコンパイル時間を相殺する必要があります。特性と概念は、開発において非常に役立ちます。コンパイル時間は確かにそれを支払うための小さな代償です。
Konrad Rudolph

8

C ++プログラミングへのより近代的なアプローチを可能にするライブラリを追加します。

私の経験では、多くのC ++プログラマーは実際には1990年代初頭のC ++プログラマーであり、ジェネリックをあまり使用せずにC ++クラスを作成しています。より最近のアプローチでは、ジェネリックを使用して、動的言語に似た方法でソフトウェアを構成しますが、最終的には型チェック/パフォーマンスを利用できます。見るのは少し醜いです。しかし、構文の問題を乗り越えたら、それは本当に素晴らしいことです。Boostは、簡単にコンテンツを作成するために必要な多くのツールを提供します。スマートポインター、関数、ラムダ、バインディングなど。C++を記述するこの新しい方法を利用して、ネットワーキング、正規表現などを提供するブーストライブラリがあります。

多くのforループを記述している場合、または関数オブジェクトを手動でローリングしている場合、またはメモリ管理を行っている場合は、ブーストアウトを確認する必要があります。


8

BOOSTは、多くのC ++プロジェクトに共通するニーズを満たすライブラリのコレクションです。一般に、BOOST実装コードの読みやすさよりも正確さ、再利用性、移植性、実行時のパフォーマンス、およびスペース効率を優先し、場合によってはコンパイル時間も優先します。彼らは完全な高レベルの機能要件(アプリケーションフレームワークなど)をカバーしない傾向があり、代わりに(ありがたいことに)アプリケーション設計を指示または支配することなく、より自由に組み合わせることができるビルディングブロックを提供します。

BOOSTの使用を検討する重要な理由は次のとおりです。

  • ほとんどのライブラリは十分にテストおよび設計されています。一般的に、同じ問題空間で自作のソリューションを使用している人々と比較して、優れたプログラマーによって妥当なサウンドのレビューを受けており、広範な現実のフィードバックを収集するのに十分使用されています。
  • それはすでに書かれていて、あなたの解決策はおそらくそうではありません
  • かなり移植性があります(ただし、ライブラリによって異なります)
  • C ++コミュニティのより多くの人々があなたのコードを手助けする先導的な役割を果たすでしょう
  • 多くの場合、BOOSTはC ++標準への導入の実証地であるため、BOOST以外の標準と互換性を持つようにコードを書き直す際の作業が少なくなります。
  • コミュニティの要求により、コンパイラベンダーはBOOSTの使用に関する正確さの問題をテストして対応する可能性が高くなります
  • ブーストライブラリに精通していると、他のプロジェクト(おそらく他の会社)で同様の作業を行うのに役立ちます。この場合、現在記述しているコードは再利用できません。

ライブラリについては、1行または2行で説明します:http : //www.boost.org/doc/libs/




3

Boostは、基本的に標準がどのようになるかの概要を説明します。また、Boostが取得するすべてのピアレビューと使用法に加えて、依存関係についてかなりの取引を確実に得ることができます。

ただし、Boostは外部依存関係であるため、ほとんどのショップでは使用していません。そして実際には、外部依存関係を減らすことも非常に重要です。


3

ブーストは.NET FrameworkがC#に似ているようなC ++に対するものですが、おそらく小規模です。


2

私はファイルシステムライブラリを使用して少し終了し、boost :: shared_ptrはかなり気の利いたものです。他のこともしているそうです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.