便利クラスを集めたライブラリです。リリースされてから随分経つので,ご存知の方も多いはず。型」というどんな型でも放り込める型を提供してくれる夢のようなクラスです。使い方については,丁寧な説明を作ってくださっている方がたくさんいらっしゃるので,ぐぐってみてください。ここでは中身の話だけ。やって「なんでも型」を作っているのか見てみます。先に言ってしまうけれど,この設計は美しいと思う。ことで,ソースコードです。キャスト周りや周辺のおまけメソッドは省略。体裁を修正しています。クラス図モドキを描いてみました。コンポジションを描けないので,雰囲気だけ。いわゆるインターフェイスです。インターフェイスへのポインタを持っているところです。クラステンプレートのオブジェクトです。インターフェイスを通じて実体にアクセスすることができるというわけ。インターフェイスというと,複数の異なるクラスに共通のインターフェイスを持たせることで,ポリモーフィズムを可能にすることが強調されるけれど,全く異なるクラスである必要はなくて,テンプレートのようなもんでもいい。と2段階で抽象化しているわけで,これは上手いなあと思う。クラスの初期化はどうするのかというと,オペレータやコピーコンストラクタをテンプレート関数として定義することで実現しています。これがポイント2点目。これでどんな型でも受け入れられるし,どんなオブジェクトも内部に持つことができる。上述のインターフェイスのおかげで,アクセスもできる。クラスからのダウンキャストです。プログラマさんの一部には,ダウンキャストするやつは腹切って死ね!という人もいるわけですけれど(いないか),こればっかりはしょうがない。場合もダウンキャストはするわけですけれど,例外周りを固めているので腹切るまではしなくて済みそうです。この設計はクラスによる抽象化のお手本みたいな設計なんだと思います。いいもん見せてもらいました。