BOOST_FUSION_ADAPT_ASSOC_STRUCTは、ユーザー定義型をFusionのRandom Access SequenceおよびAssociative Sequenceとしてアダプトするためのマクロです。
これを使用することで、ユーザー定義型内にあるとくに意味を持たせていなかった変数などに、後付けで名前を付けることができ、名前なしのシーケンスとしても扱うことができます。
#include <boost/assert.hpp> #include <boost/fusion/include/map.hpp> #include <boost/fusion/include/at_key.hpp> #include <boost/fusion/include/at_c.hpp> #include <boost/fusion/include/adapt_assoc_struct.hpp> namespace fusion = boost::fusion; struct x {}; struct y {}; struct z {}; struct vec { int ar[3]; }; BOOST_FUSION_ADAPT_ASSOC_STRUCT( vec, (int, ar[0], x) (int, ar[1], y) (int, ar[2], z) ) int main() { const vec v = {3, 1, 4}; // Associative Sequence BOOST_ASSERT(fusion::at_key<x>(v) == 3); BOOST_ASSERT(fusion::at_key<y>(v) == 1); BOOST_ASSERT(fusion::at_key<z>(v) == 4); // Random Access Sequence BOOST_ASSERT(fusion::at_c<0>(v) == 3); BOOST_ASSERT(fusion::at_c<1>(v) == 1); BOOST_ASSERT(fusion::at_c<2>(v) == 4); }