質問

このサイトを使い始めてから、Boost ライブラリについてよく耳にします。Boost ライブラリの主な利点は何でしょうか (したがって、なぜそれを使用する必要があるのでしょうか)、また Boost ライブラリはどの程度移植性があるのでしょうか?

役に立ちましたか?

解決

Boost は標準委員会の数人のメンバーによって組織されています。
したがって、これは次の標準に含まれるライブラリの温床となります。

  1. これは STL の拡張です (省略されたビットを埋めます)。
  2. それはよく文書化されています。
  3. 査読もしっかり行われています。
  4. アクティビティが高いため、バグがすぐに発見され、修正されます。
  5. プラットフォームに依存せず、どこでも機能します。
  6. 使用は無料です。

tr1 が間もなく登場するので、ブーストがすでにかなりの部分をカバーしていることを知るのは嬉しいことです。tr1 のライブラリの多くは基本的にブーストのオリジナルから直接適応されており、試行されテストされています。違いは、それらが (boost ではなく) std::tr1 名前空間に移動されていることです。

必要なのは、コンパイラのデフォルトに以下を追加することだけです 検索パスを含める:

<boost-install-path>/boost/tr1/tr1

次に、標準ヘッダーを含めると、Boost は必要なすべてのものを名前空間 std::tr1 に自動的にインポートします。

例えば:

std::tr1::share_ptr を使用するには、<memory> を含める必要があるだけです。これにより、1 つのファイルですべてのスマート ポインターが提供されます。

他のヒント

単純に読むことができます ブーストの背景情報 このページでは、Boost を使用する理由と、それを何に使用できるかを簡単に説明します。数分かかる価値はあります。

99%ポータブル。

ブーストによって解決されるニーズを発見した場合に非常に役立つライブラリがかなりの数あると思います。自分でコーディングするか、非常に堅牢なライブラリを使用するかのどちらかです。Multi-Index、Lambda、Program Options、RegEx、SmartPtr、Tuple などのソースが公開されているのは素晴らしいことです...

最善の方法は、時間をかけてさまざまなライブラリのドキュメントを調べて、それが役立つかどうかを評価することです。

価値がある!!

C++0x で導入される多くの機能を利用できます。しかし、その一般性とは別に、より良い詳細のいくつかは簡単です。 正規表現ライブラリ, 、の鋳造ライブラリ 文字列から整数へのキャスト (語彙キャスト):

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}

日付/時刻ライブラリ, 、とりわけ...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday

もあります Pythonインターフェース (Python のブースト)、 レクサー/パーサー DSL (ブーストスピリット):

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

それはほんの表面をなぞっただけです...

ブーストは素晴らしいですが、Devil's Advocate をプレイするだけならブーストを使用したくない理由がいくつかあります。

  • 古いコンパイラではコンパイルに失敗したり、正しく動作しないことがあります。
  • 多くの場合、テンプレートをあまり使用しないアプローチよりもコンパイル時間が長くなります。
  • 一部の Boost コードは、思ったとおりに動作しない場合があります。ドキュメントを読んでください!
  • テンプレートを悪用すると、判読できないエラー メッセージが発生する可能性があります。
  • テンプレートを悪用すると、デバッガーでのステップ実行が困難なコードが生成される可能性があります。
  • 最先端の C++ です。Boost の次のバージョンは、現在の (古い) コンパイラではコンパイルできなくなる可能性があります。

これらすべては、Boost をそのまま使用しない場合でも、Boost コードを見て自分でアイデアを得る必要がないという意味ではありません。

Boost は C++ ライブラリのコレクションです。そのうち 10 個は C++0x の tr1 に含まれています。

あなたはできる ここからブーストを始めてください.

ブースト は、移植性と正確性を重視した、ピアレビューされた高品質の C++ ライブラリのコレクションです。これは、言語および標準ライブラリに新たに追加するための事実上の証明場所として機能します。詳細については、Web サイトをご覧ください。

ブーストの利点:これは広く利用可能であり、最新の C++ コンパイラやあらゆるプラットフォームに移植されます。
関数はプラットフォームに依存しないため、新しいフレームワークごとに新しいスレッドの設計を学習する必要はありません。
ファイルシステムなど、多くのプラットフォーム固有の機能を標準的な方法でカプセル化します。

これは C++ に同梱されるべきものです。Java の人気の多くは、必要なことをほぼすべて実行できる標準ライブラリが同梱されていることでした。残念ながら、C++ は限られた C/Unix 標準関数しか継承しませんでした。

shared_ptr そして weak_ptr, 特にマルチスレッド コードでは、それだけでも boost をインストールする価値があります。 BOOST_STATIC_ASSERT コンパイル時のロジックチェックを行うのにも非常に優れています。

boost のクラスやユーティリティの多くがヘッダー内にあるという事実、つまり何もコンパイルせずに多くの機能を取得できるという事実も利点です。非常に古いコンパイラを使用しない限り、移植性は通常は問題になりません。以前、MPL を VC6 で動作させようとしましたが、完全に爆発する前に 40,000 件の警告/内部エラーが出力されました。ただし、一般に、ライブラリのほとんどは、プラットフォームやコンパイラ ベンダーに関係なく動作するはずです。

Boost のかなりの部分がすでに TR1 に含まれており、C++ 標準ライブラリの次のリビジョンに含まれる可能性が高いという事実を考慮してください。それはかなり大きな支持です。

Boost は、ほぼすべてのアプリケーションで役立つ (通常は) 汎用構造の非常に広範なライブラリです。これは、C++ 0x 仕様に多くのブースト コンポーネントが含まれているという事実によってわかります。

また、少なくとも主要なプラットフォーム間で移植可能であり、ほぼ標準に準拠した C++ コンパイラを備えたほぼすべてのプラットフォームに移植できるはずです。

唯一の警告は、ブースト ライブラリ間に多くの依存関係が混在する可能性があり、(ブースト ライブラリ全体を除く) 配布する特定のコンポーネントだけを選択することが困難になることです。

上記のすべてに加えて、多くの最新のベストプラクティス C++ テクニックを奨励します。コードの品質が向上する傾向があります。

また、ブーストのほとんどはテンプレートであるため、ビルドする必要がないことにも注意してください。
(正しいヘッダー ファイルをインクルードするだけです)。

構築が必要ないくつかのパーツはオプションです。
これらはそれぞれ独立して構築できるため、不要なコードによる不必要な肥大化を防ぎます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top