Boost C++ Libraries は、Boost.orgによるC++ライブラリです。 テンプレートを利用した、コンパクトなユーティリティクラス群で構成されています。
ソースをBoost.orgからダウンロードします。 ほとんどの機能はヘッダのインクルードのみで使用可能ですが、いくつかコンパイルの必要があるものがあります。 ……が、うまくコンパイルできなかったので細かいところはよくわかりませんw
テンプレートを使っている関係で、コンパイラの中には相性の悪いものもあるようです。 特に、VC++6.0はテンプレートの部分特殊化ができないため、制限が多いです。
any.hpp : いわゆるVariant型。代入は楽だが、any_castを使用する読み取りは少し面倒。
array.hpp : 静的にサイズを指定する配列。組み込み配列のラッパー。
bind.hpp : 関数アダプタ。_1, _2
といった記述が特殊だが、std::bind1st, bind2ndよりも直感的。
【実験】
mem_fn.hpp : スマートポインタへの対応など、改良されたメンバ関数アダプタ。 【実験】
cast.hpp : 型変換エラー時に例外を投げるキャスト群。polymorphic_cast, polymorphic_downcast, numeric_cast
lexical_cast.hpp : iostreamを利用した型変換。lexical_cast
function.hpp : 拡張関数ポインタ。Commandパターンやコールバック関数に便利。policyによる呼び出し制御機能もある。 【実験】
functional.hpp : not1/2, bind1st/2nd, ptr_fun, mem_fun, etc.
- 「参照の参照」問題に対処された同名のstd関数アダプタの改良版。
mem_fun に関しては、スマートポインタが使える boost::mem_fn のほうが高性能。
for_each(a.begin(), a.end(), std::cout << _1 << ' ');
は衝撃的だが、VC++6&7では動かない。
rational.hpp : 有理数(分数)クラス。【実験】
scoped_ptr.hpp , scoped_array.hpp : コピーできないstd::auto_ptr。
shared_ptr.hpp, shared_array.hpp, weak_ptr.hpp : 非侵襲型参照カウントポインタ。
static_assert.hpp : コンパイル時のアサーション。アライメントのチェックなどに使用する。
timer.hpp : timer
- いわゆるストップウォッチ。返値は秒単位のdouble値。
progress.hpp : progress_timer
- コンストラクト〜デストラクトの時間を計り、経過時間をostreamに出力する。
progress.hpp : progress_display
- テキストベースのプログレスバー。
文字列の切り出し。CSVの読み込みが非常に楽になりそう。 内部でctypeのASCII用文字判別関数を使用しているのが災いし、日本語でエラーが出るのが難点。 【実験】
tuple/tuple.hpp : 3つ以上の要素をもてるstd::pair。複数要素を返値にする関数に使える。VC++との相性は悪い。 【実験】
shared_ptrはとても便利です。 std::auto_ptrと組み合わせると、本当にガベージコレクションは必要なのかな、という気になってきます。
関数オブジェクト系は、あまりにテンプレートを酷使するため、よほど詳しくなければC++には見えないでしょう。 また、C++では無名関数が使えないので、劇的に使い勝手が上がるということはないのでは?