- Rangeを受け取りRangeを返す関数を連続で呼び出すとき h(g(f(rng))) を rng | f | g | h のように"手続き的に"書ける
- Boost.RangeExのboost::adaptor名前空間にあります
- 見た目に反して、あるRangeへの実装はすぐにできます
- 正式にadapterなのかadaptorなのか不明
[]{[]
[]using[] []namespace[] []biscuit[][];[]
[]BOOST_ASSERT[][](([]
[]match[][]< [][]repeat[][]< [][]char_[][]<[][]'D'[][]>, [][]3[][] > >([]
[]boost[][]::[][]make_transform_range[][]( []
[]make_filter_range[][]< [][]not_[][]< [][]char_[][]<[][]'c'[][]> > >([]
[]make_filter_range[][]< [][]not_[][]< [][]char_[][]<[][]'b'[][]> > >([]
[]make_filter_range[][]< [][]not_[][]< [][]char_[][]<[][]'a'[][]> > >([][]"abcdabcdabcd"[][])[]
[] )[]
[] ),[]
[]toupper_fun[][]()[]
[] )[]
[] )[]
[] ));[]
[]BOOST_ASSERT[][](([]
[]match[][]< [][]repeat[][]< [][]char_[][]<[][]'D'[][]>, [][]3[][] > >([]
[]"abcdabcdabcd"[][] |[]
[]filtered[][]< [][]not_[][]< [][]char_[][]<[][]'a'[][]> > >() |[]
[]filtered[][]< [][]not_[][]< [][]char_[][]<[][]'b'[][]> > >() |[]
[]filtered[][]< [][]not_[][]< [][]char_[][]<[][]'c'[][]> > >() |[]
[]boost[][]::[][]adaptor[][]::[][]transform[][]([][]toupper_fun[][]()) []
[] )[]
[] ));[]
[]}[]