contents

  1. 導入
  2. クラス
  3. 感想

Boost C++ Libraries

Boost C++ Libraries は、Boost.orgによるC++ライブラリです。 テンプレートを利用した、コンパクトなユーティリティクラス群で構成されています。

導入

ソースをBoost.orgからダウンロードします。 ほとんどの機能はヘッダのインクルードのみで使用可能ですが、いくつかコンパイルの必要があるものがあります。 ……が、うまくコンパイルできなかったので細かいところはよくわかりませんw

テンプレートを使っている関係で、コンパイラの中には相性の悪いものもあるようです。 特に、VC++6.0はテンプレートの部分特殊化ができないため、制限が多いです。

クラス

any

any.hpp : いわゆるVariant型。代入は楽だが、any_castを使用する読み取りは少し面倒。

array

array.hpp : 静的にサイズを指定する配列。組み込み配列のラッパー。

bind

bind.hpp : 関数アダプタ。_1, _2 といった記述が特殊だが、std::bind1st, bind2ndよりも直感的。 【実験】

mem_fn.hpp : スマートポインタへの対応など、改良されたメンバ関数アダプタ。 【実験】

conversion

cast.hpp : 型変換エラー時に例外を投げるキャスト群。polymorphic_cast, polymorphic_downcast, numeric_cast

lexical_cast.hpp : iostreamを利用した型変換。lexical_cast

function

function.hpp : 拡張関数ポインタ。Commandパターンやコールバック関数に便利。policyによる呼び出し制御機能もある。 【実験】

functional

functional.hpp : not1/2, bind1st/2nd, ptr_fun, mem_fun, etc. - 「参照の参照」問題に対処された同名のstd関数アダプタの改良版。 mem_fun に関しては、スマートポインタが使える boost::mem_fn のほうが高性能。

lambda

for_each(a.begin(), a.end(), std::cout << _1 << ' '); は衝撃的だが、VC++6&7では動かない。

rational

rational.hpp : 有理数(分数)クラス。【実験】

smatr_ptr

scoped_ptr.hpp , scoped_array.hpp : コピーできないstd::auto_ptr。

shared_ptr.hpp, shared_array.hpp, weak_ptr.hpp : 非侵襲型参照カウントポインタ。

static_assert

static_assert.hpp : コンパイル時のアサーション。アライメントのチェックなどに使用する。

timer

timer.hpp : timer - いわゆるストップウォッチ。返値は秒単位のdouble値。

progress.hpp : progress_timer - コンストラクト〜デストラクトの時間を計り、経過時間をostreamに出力する。

progress.hpp : progress_display - テキストベースのプログレスバー。

tokenizer

文字列の切り出し。CSVの読み込みが非常に楽になりそう。 内部でctypeのASCII用文字判別関数を使用しているのが災いし、日本語でエラーが出るのが難点。 【実験】

tuple

tuple/tuple.hpp : 3つ以上の要素をもてるstd::pair。複数要素を返値にする関数に使える。VC++との相性は悪い。 【実験】


以下、書きかけ
call_traits
「参照の参照」などの問題を防ぐためのカプセル化ユーティリティ。テンプレートの部分特殊化が必須。
compatibility
<cXXX>, <limits>がないコンパイラのためのヘッダ。特に使う必要はなし。
compose
汎関数(関数の関数)アダプタ。おとなしくforループにしてしまったほうがわかりやすい気も……。
compressed_pair
片方のクラスが空の場合に最適化がかかるpair。
concept_check
テンプレートに関するコンパイルエラーメッセージはわかりにくいのだが、それをわかりやすいメッセージにしてくれる。
config
crc
graph
integer
io_state_savers
iterator_adaptors
math
common_factor, octonion, quaternion, special_functions
operators
pool
preprocessor
property_map
読み書きの許可指定ができるmap?普通のmapとの違いがわかりません。
python
random
ref
regex
test
いわゆるASSERT()。Windowsからだと、main()を置き換えるのと、出力先がコンソールなことが難点。
thread
type_traits
テンプレート引数の情報を得る。static assertと組み合わせるくらいか?
utility
deleteとdelete[]を型チェックする機構。インクリメント、デクリメントのファンクタ。コピーできないクラスのベースクラス。

個人的感想

shared_ptrはとても便利です。 std::auto_ptrと組み合わせると、本当にガベージコレクションは必要なのかな、という気になってきます。

関数オブジェクト系は、あまりにテンプレートを酷使するため、よほど詳しくなければC++には見えないでしょう。 また、C++では無名関数が使えないので、劇的に使い勝手が上がるということはないのでは?