BOOST_FUSION_DEFINE_STRUCTで定義された型は、Fusionシーケンスにアダプトされると同時に、
Fusionシーケンスを受け取るコンストラクタと代入演算子が生成されるようです。
そのため、fusion::copy()を使用することなくシーケンスの型変換ができます。
#include <iostream> #include <string> #include <boost/fusion/include/define_struct.hpp> #include <boost/fusion/include/vector.hpp> #include <boost/fusion/include/io.hpp> BOOST_FUSION_DEFINE_STRUCT( (), Person, (int, id) (int, age) (std::string, name) ) int main() { using namespace boost::fusion::operators; const boost::fusion::vector<int, int, std::string> v(1, 26, "Akira"); { const Person p = v; std::cout << p << std::endl; } { Person p; p = v; std::cout << p << std::endl; } }
(1 26 Akira) (1 26 Akira)
参照:
BOOST_FUSION_DEFINE_STRUCT