Boost 1.47.0から、Boost.Fusionにcopyアルゴリズムが入ります。
シーケンスの内容を他のシーケンスにコピーするアルゴリズムですが、主な使用目的はシーケンスの型変換です。
boost::fusion::vectorを、Fusionシーケンスとしてアダプトされたユーザー定義型に変換したい場合に使えます。
#include <iostream> #include <string> #include <boost/fusion/include/vector.hpp> #include <boost/fusion/include/adapt_struct.hpp> #include <boost/fusion/include/copy.hpp> struct Person { int id; std::string name; int age; Person() : id(0), age(0) {} Person(int id, const std::string& name, int age) : id(id), name(name), age(age) {} void print() const { std::cout << id << "," << name << "," << age << std::endl; } }; BOOST_FUSION_ADAPT_STRUCT( Person, (int, id) (std::string, name) (int, age) ); namespace fusion = boost::fusion; int main() { const fusion::vector<int, std::string, int> v(1, "Akira", 26); Person p; fusion::copy(v, p); p.print(); }
1,Akira,26
Fusionのcopyアルゴリズムは以前書いて、参照の引数を書き換えるようなmutableアルゴリズムはFusionの設計思想に合わないだろうな、と思って提案しなかったのですが、その直後くらいにcopyアルゴリズムがtrunkに追加されてました…。copyアルゴリズムのためにauxiliaryという新たなカテゴリが用意されてましたね…こんなことなら提案すればよかった。
Fusion Sequenceの変換(ボツ)
Boost.Fusion copyアルゴリズムを書いた