この項目では、C++のコミュニティおよびライブラリについて説明しています。その他の用法については「ブースト」をご覧ください。
Boost C++ Libraries
最新版1.85.0 / 2024年4月15日 (34日前) (2024-04-15)[1]
リポジトリ
github.com/boostorg/boost
Boost (ブースト)とは、C++の開発者のコミュニティ、およびそのコミュニティによって公開されているオープンソースのソフトウェアライブラリのことを指す。 コミュニティとしてのBoostはC++標準化委員会の委員により設立されており、現在でもその多くが構成員として留まっている。このような経緯もあり、BoostコミュニティはC++の標準化において大きな影響力を有している。実際に標準化委員会が発表した「TR1」の2/3以上がBoostライブラリを基にしている。Random, Regex, ThreadなどはいずれもC++11規格の標準ライブラリとして正式に導入・標準化されている。その後もOptionalやAnyなどがC++17規格で導入されており、影響を与え続けている。このことから、Boostは考案された新機能を標準化させる前の試験運用の場であるとも言える。 Boostで公開されるライブラリはコミュニティの公開レビューによって精選されている。Boostを使用して作成したプログラムは、商用、非商用を問わず無償のBoost Software License
概要
Boostはテンプレートなどを活用して積極的にメタプログラミングやジェネリックプログラミングの技法を取り入れて行く傾向がある。そのためBoostライブラリの利用者にはC++の現代的な記述に慣れていることを要求される。 Boostには次のような分野のライブラリが含まれている。ヘッダーをインクルードするだけで使えるクラステンプレートや関数テンプレートが多いが、ライブラリの一部はビルドが必要。
内容
アルゴリズム
ジェネレータ
random
uuid - UUID[3]
並列プログラミング(非同期プログラミング)
thread - スレッド
context - ユーザーレベルコンテキストスイッチ
coroutine - コルーチン
fiber - ファイバー
compute - OpenCLベースのマルチコアCPU/GPGPU演算プラットフォームインターフェイス
コンテナ
array - STLコンテナ方式による固定長配列の管理
Boost Graph Library (BGL) - 総称的グラフコンテナ、コンポーネント、アルゴリズム
multi-array - N次元配列の生成の単純化
multi-index containers - 異なるソートとアクセスセマンティクスを可能にするビルトインインデックスのあるコンテナ
pointer containers - 値へのポインタを素直に管理できるようにする標準的なSTLコンテナをモデルにしたコンテナ
property map - コンセプト的なインターフェイス仕様とキー値をオブジェクトにマップするための多目的インターフェイス
variant - コンパイル時に指定する型の集合から選べる型オブジェクトの効率的なストレージと、それにアクセスする型安全で総称的なスタックベースのオブジェクトコンテナ
any - あらゆる型の値を格納することができる動的型(ヘテロジニアスコンテナ[4])
正当性とテスト
concept check - 指定可能なテンプレートパラメータ(コンセプト)を制限できるようにする
static assert - コンパイル時アサートのサポート
Boost Test Library - テストプログラムの作成、テストケースとテストスイートによるテストの構成、そしてそれらの実行制御のためのコンポーネントの組み合わせ。
データ構造
dynamic_bitset - 動的なstd::bitset-に似たデータ構造
関数オブジェクトと高階プログラミング (無名関数など)
bindとmem_fn - 関数、関数オブジェクト、関数ポインタおよびメンバ関数のための汎用バインダ
function - 遅延呼び出しのための関数オブジェクトのラッパー。コールバックのための汎用的なメカニズムも提供される。
functional - C++標準ライブラリで定義される関数オブジェクトのアダプタの強化。以下の内容を含む。
function object traits
negators
binders
adapters for pointers to functions
adapters for pointers to member functions
hash - C++ Technical Report 1 (TR1) で定義されているハッシュ関数オブジェクトの実装。ソートされていない連想コンテナのデフォルトのハッシュ関数として利用できる。
lambda - ラムダ抽象化の考え方で、プレースホルダー (placeholders) を使用して、小さい無名関数オブジェクトを定義できるようにする。特にアルゴリズムからの遅延呼び出しを使って、呼び出し地点でのこれらのオブジェクトの操作を可能とする。
ref - 標準C++の参照の能力を強化するため、特に関数テンプレートで利用するための、ユーティリティクラステンプレートを提供する。
result_of - 関数オブジェクトの戻り値の型を取り出す。関数の型を定義するのに役立つ。
signals2 - 管理されたシグナルとスロットのコールバック実装
総称プログラミング
Graphs
入出力
言語間サポート(Python用)
イテレータ
iterators
operators - ユーザー定義のイテレーターのための演算子をオーバーロードしてクラスが算術計算に適用できるようにするクラステンプレート。
tokenizer - シーケンス内に含まれるトークンのセットをコンテナとして見えるようにしてイテレーターでアクセスできるようにする。
数学と計算
QVM - 3次元コンピュータグラフィックスプログラミングで多用される固定サイズのクォータニオン、ベクトル、行列
メモリ(参照カウントによるスマートポインタなど)
pool - 分割されたストレージベースのシンプルなメモリ管理スキームを提供する。
smart_ptr - 様々なポインタ管理方式によるスマートポインタクラステンプレートのコレクション。
scoped_ptr - ポインタ(単一のオブジェクト)を所有する。
scoped_array - 配列用のscoped_ptr。
shared_ptr - 他のshared_ptrと共有できるポインタ。最後のshared_ptrが破棄されたときにポインタを破棄する。
shared_array - 配列用のshared_ptr。
weak_ptr - すでにshared_ptrで管理されているオブジェクトへの「弱い参照」を提供する。
intrusive_ptr - ポインタが提供する参照カウンタを使用するshared_ptrに似たクラス。
utility - 以下のようなその他のクラス。
base from member idiom - 派生クラスのコンストラクタの初期化子でベースクラスのメンバを初期化する必要のあるクラスのための回避策を提供する。
checked delete - 不完全な型へのポインタを使用してオブジェクトまたはオブジェクトの配列を破棄しようとする試みをチェックする。
next and prior functions - 特に操作の結果が異なるイテレーターに保存されている必要がある(つまりオリジナルのイテレーターを変更できない)場合に、前方向または両方向のイテレーターをより簡単に操作できる。
noncopyable - コピーコンストラクタと代入演算子を禁止できる。
addressof - operator&()演算子のオーバーロードをバイパスしてオブジェクトの実際のアドレスを取得できるようにする。
result_of - 関数の型を定義するのに役立つ。
@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}その他[要説明]
構文解析
プリプロセッサメタプログラミング
文字列とテキスト処理(正規表現など)
lexical_cast - テキストとの型変換
format - タイプセーフな引数のフォーマット文字列
iostreams - 新しい送受信フィルタフレームワークのためのC++ストリームとストリームバッファの補助
regex, xpressive - 正規表現のサポート
Spirit - オブジェクト指向的な再帰的下向き構文解析ジェネレーターのフレームワーク。
string algorithms - 文字列に関する様々なアルゴリズムのコレクション。
tokenizer - 文字列やその他の文字シーケンスをトークンで分割できるようにする。
wave - C99/C++のプリプロセッサ機能の標準に準拠した実装。使いやすいインターフェイスでラップされている。
テンプレートメタプログラミング