超スマートポインタ

http://d.hatena.ne.jp/kilrey/20071010#p2の続き。
自動的にメンバとして含まれる超スマートポインタを検出するのは難しい。それならば手動で登録してしまえば良いのではないか。要するにboost::serializationの様に手軽に登録できれば良いのだ。
まずmap>>のような登録先テーブルを作る。で、クラスを作るごとに超スマートポインタであるメンバごとに中身の型とthisからのオフセットを登録する。後は任意のタイミングで循環検出をすれば良い。まあ、サンプルは書けないけれども。

      • -

グレイリストを構築しておく必要があるのを忘れていた。とりあえず、http://www.dodgson.org/omo/t/?date=20060507で解説されている手法で問題ないと思う。
何か抜けがあるような気もするがまた次回。