Boost.Fusionには、以前からBOOST_FUSION_ADAPT_STRUCTというユーザー定義の構造体をFusionのシーケンスコンテナとして扱うためのマクロがありましたが、Boost 1.43.0から構造体ごと定義するBOOST_FUSION_DEFINE_STRUCTマクロが入りました。
#include <iostream> #include <string> #include <boost/fusion/include/define_struct.hpp> #include <boost/fusion/include/algorithm.hpp> BOOST_FUSION_DEFINE_STRUCT( (ns)(info), person, (std::string, name) (int, age) ) struct disp { typedef void result_type; template <class T> void operator()(const T& x) const { std::cout << x << std::endl; } }; int main() { ns::info::person p; p.name = "Akira"; p.age = 25; boost::fusion::for_each(p, disp()); }
Akira 25
他にも、Fusionの連想コンテナとして扱うためのマクロが追加されていますが、これは未調査です。
参照:
ユーザー定義のクラスをFusionのコンテナ(タプル)として使用する