Range AdaptorをBoost.Spirit風にする

  • 開発中のBoost.Protoを使って演算子オーバーロードをしてみる (実装)
    • result_ofにはまだちゃんと対応してないようだ
    • 以前の使い方([id:mb2sync:20051025])とは、かなり変わっている

[]#include[] []<pstade/oven/compile.hpp>[]

[]#include[] []<string>[]
[]#include[] []<list>[]
[]#include[] []<vector>[]
[]#include[] []<pstade/oven/equals.hpp>[]
[]#include[] []<pstade/oven/copy_range.hpp>[]
[]#include[] []<pstade/oven/take_range.hpp>[]

[]void[] []test[][]()[]
[]{[]
[]namespace[] []oven[][] = [][]pstade[][]::[][]oven[][];[]
[]using[] []namespace[] []oven[][];[]

[] {[]
[]std[][]::[][]string[] []rng1[][]([][]"12"[][]);[]
[]std[][]::[][]list[][]<[][]char[][]> [][]rng2[][] = [][]std[][]::[][]string[][]([][]"34"[][])|[][]copied[][];[]
[]std[][]::[][]vector[][]<[][]char[][]> [][]rng3[][] = [][]std[][]::[][]string[][]([][]"56"[][])|[][]copied[][];[]

[]BOOST_CHECK[][]( [][]equals[][]([]
[]compile[][]( +([][]rng1[][] >> ([][]rng2[][]|[][]as_expr[][]) >> [][]rng3[][]) ) | [][]taken[][]([][]18[][]),[]
[]std[][]::[][]string[][]([][]"123456123456123456"[][])[]
[] ) );[]
[] }[]
[]}[]