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

Boost.Fusionのtie

C++

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の方がエラーになる…
追い切れてないですが、部分特殊化が怪しい・・・のかな?