#include <boost/visit_each.hpp>
visit_each
の機構は、
visitor を与えられたオブジェクトの全部分オブジェクトに対して適用することを可能にする。
これは Signals ライブラリによって関数オブジェクト中の trackable オブジェクトを見つけ出すために使われているが、
広く使われれば他の用途も出てくるだろう (例: 保守的ガベージコレクション)。
visit_each
フレームワークに適合させるため、
各オブジェクト型に対して visit_each
のオーバーロードを提供する必要がある。
namespace boost { template<typename Visitor, typename T> void visit_each(Visitor&, const T&, int); }
template<typename Visitor, typename T>
void visit_each(Visitor& v, const T& t, int);
v(t)
。また t
のすべての部分オブジェクト x
に対して
x
が参照であれば
v(boost::ref(x))
を実行。x
が参照でなければ
v(x)
を実行。<boost/visit_each.hpp>
中で定義されている visit_each
の非特殊化版の第三パラメタは long
であり、
この第三パラメタに与える実引数は常に 0 でなければならない。
第三パラメタは、
正しい関数テンプレートの部分整列の欠落が広まっているために設けられた人為的なものであり、
将来削除されるだろう。
ライブラリ作者は、
クラスの T
実引数を特殊化する追加のオーバーロードを加え、
部分オブジェクトを訪ねられるようにすることが期待されている。