fusion::zipは、タプルのタプルを返すらしい(実際はこんなコードは書かないけど型の確認用):
#include <iostream> #include <string> #include <boost/fusion/include/vector.hpp> #include <boost/fusion/include/zip.hpp> #include <boost/fusion/include/io.hpp> namespace fusion = boost::fusion; int main() { const fusion::vector<int, double> a(1, 2.3); const fusion::vector<char, std::string> b('a', "hoge"); const fusion::vector< fusion::vector<int, char>, fusion::vector<double, std::string> > c = fusion::zip(a, b); std::cout << c << std::endl; }
((1 a) (2.3 hoge))
長さが違うとどうなるのか:
#include <iostream> #include <string> #include <boost/fusion/include/vector.hpp> #include <boost/fusion/include/zip.hpp> #include <boost/fusion/include/io.hpp> namespace fusion = boost::fusion; int main() { const fusion::vector<int, double> a(1, 2.3); const fusion::vector<char> b('a'); const fusion::vector< fusion::vector<int, char> > c = fusion::as_vector(fusion::zip(a, b)); std::cout << c << std::endl; }
((1 a))
長さが合わない場合は削られるようです。
boost::zip_iteratorもこうあってほしい。