以下、Boost 1.43.0 beta1で試しました。
まず同じ要素数のRange同士をcombineしてみる。
(名前をzipにしてほしい・・・内部ではzip_rangeとか作ってるのに・・・)
#include <iostream> #include <vector> #include <string> #include <boost/range/algorithm/for_each.hpp> #include <boost/range/combine.hpp> void disp(boost::tuple<int, char> t) { std::cout << boost::get<0>(t) << "," << boost::get<1>(t) << std::endl; } int main() { const std::vector<int> v = {1, 2, 3}; const std::string s = "abc"; boost::for_each(boost::combine(v, s), &disp); }
1,a 2,b 3,c
次に、要素数が異なるRange同士をcombineしてみる。
#include <iostream> #include <vector> #include <string> #include <boost/range/algorithm/for_each.hpp> #include <boost/range/combine.hpp> void disp(boost::tuple<int, char> t) { std::cout << boost::get<0>(t) << "," << boost::get<1>(t) << std::endl; } int main() { const std::vector<int> v = {1, 2, 3, 4}; const std::string s = "abc"; boost::for_each(boost::combine(v, s), &disp); // 吹っ飛ぶ }
やっぱりだめ。
sの方を多くしても吹っ飛ぶ。
これが仕様なら、長さを合わせるためにtakenがほしい。