読者です 読者をやめる 読者になる 読者になる

FusionシーケンスからFusionシーケンスにアダプトされた型への変換

C++

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