toge's diary

コンピュータ関連の趣味をつらつらと。

boost::variantを知る

衝突判定とか順位判定とかで、複数の型を扱う場合のことで頭を痛めていたのですよ。
無意味に基底クラスを作って、そこにインターフェースを節操なく付けることに、とても気になってきました。
ということでいろいろ画策していたんですが、boost::variantでいいんじゃないかと思い立ちました。

Vistorパターンを使えるので楽チンですよね。
boost::anyも一瞬考えたのですが、どう考えてもコード中で使う型は予め分かっているはずなので、boost::variantで十分でしょうと。

http://www.issei.org/blog/archives/000185.html

にあるような、

何カ所か boost::any から boost::variant に切り替えたところメモリ消費量が数百KB位で増えて困った。メモリマップを書き出して調べた結果、 BOOST_ASSERT() マクロ展開の際に埋め込まれる関数名 (gcc だと __PRETTY_FUNCTION__ の展開結果) が長かったためと判明。関数名を表示しないようにソースを手直しして対処。

というのが気になりますけど。直さないと駄目かなぁ。