pstade::oven::outdirected の実装と Boost.Range でエミュレート
pstade::oven::outdirected の実装がどうなっているのかなーとソースコードを見てみたら pstade::oven::counting でラップしているだけでした。
こんな感じ。
std::vector<int> v = {1, 2, 3, 4, 5}; auto outdirect = pstade::oven::counting(std::begin(v), std::end(v)); boost::for_each(outdirect, [](std::vector<int>::iterator it){ std::cout << *it << std::endl; });
ほむほむ、なるほどなー。
で、同等の機能を Boost.Range で実装する場合は boost::irange を使えばよさそう。
[ソース]
#include <boost/range/irange.hpp> #include <boost/range/algorithm/for_each.hpp> #include <iostream> template<typename Range> auto outdirect(Range& range) ->decltype(boost::irange(std::begin(range), std::end(range))){ return boost::irange(std::begin(range), std::end(range)); } int main(){ std::vector<int> v = {1, 2, 3, 4, 5}; boost::for_each(outdirect(v), [](std::vector<int>::iterator it){ std::cout << *it << std::endl; }); return 0; }
[出力]
1 2 3 4 5
[boost]
- ver 1.52.0