RangeExのcombineを試してみる

以下、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がほしい。