Boost.Tupleではstd::pair, boost::tupleからの多重代入にboost::tieを使用していましたが
#include <boost/tuple/tuple.hpp> int main() { boost::tuple<int, int> t(0, 1); int x, y; boost::tie(x, y) = t; // x:0 y:1 }
Boost.Fusionでは、vectorやlistといった各コンテナにvector_tie、list_tieといった関数が提供されています。
#include <boost/fusion/container/vector.hpp> #include <boost/fusion/include/vector_tie.hpp> namespace fusion = boost::fusion; int main() { fusion::vector<int, int> t(0, 1); int x, y; fusion::vector_tie(x, y) = t; // x:0 y:1 }
#include <boost/fusion/container/list.hpp> #include <boost/fusion/include/list_tie.hpp> namespace fusion = boost::fusion; int main() { fusion::list<int, double> t(1, 3.14); int x, y; fusion::list_tie(x, y) = t; }
あれ、VC9 SP1だとlistの方がエラーになる…
追い切れてないですが、部分特殊化が怪しい・・・のかな?