Boost 1.44.0でアンドキュメントに存在していたBOOST_FUSION_ADAPT_CLASSが、Boost 1.45.0でBOOST_FUSION_ADAPT_ADTという名前に変更され、正式にリリースされました。
以下のエントリのプログラムを、BOOST_FUSION_ADAPT_ADTで書きなおしてみます。
BOOST_FUSION_ADAPT_CLASS - Faith and Brave - C++で遊ぼう
#include <iostream> #include <boost/fusion/include/algorithm.hpp> #include <boost/fusion/include/adapt_adt.hpp> #include <boost/fusion/include/as_vector.hpp> namespace fusion = boost::fusion; class point { int x_, y_; public: point(int x, int y) : x_(x), y_(y) {} int get_x() const { return x_; } int get_y() const { return y_; } void set_x(int x) { x_ = x; } void set_y(int y) { y_ = y; } }; BOOST_FUSION_ADAPT_ADT( point, (int, int, obj.get_x(), obj.set_x(val)) (int, int, obj.get_y(), obj.set_y(val)) ); struct disp { template <class T> void operator()(const T& x) const { std::cout << x << std::endl; } }; int main() { const point p(1, 2); fusion::for_each(p, disp()); }
1 2
基本はインクルードするヘッダとマクロ名が変わっただけで、それに加えてFusionアルゴリズムに渡す際にas_vectorする必要がなくなっています。