enumerate_range

  • id:y-hamigaki:20060409のスレッドを使ったiteratorのおかげでid:mb2sync:20060408に意味が出てきた?
  • Enumerableという概念を勝手に作って、このiteratorでSinglePassRangeを作る
  • やれることはenumerateを使っても変わらないが、BOOST_FOREACHが使えるのはうれしいかもしれない
    • ウィンドウの列挙ならスレッドリソースを使っても報われる気がする
    • さらにmulti_pass iteratorを使えば・・・
  • ソースは、ここのsausage/とtomato/window/フォルダにあります

[]void[] []test[][]()[]
[]{[]

[]using[] []namespace[] []pstade[][];[]

[]tomato[][]::[][]child_windows[] []wnds[][](::[][]GetDesktopWindow[][]());[]

[] {[]
[]sausage[][]::[][]enumerate[][]([][]wnds[][], [][]Output[][]());[]
[] }[]

[] {[]
[]BOOST_FOREACH[][] ([][]HWND[] []hWnd[][], [][]wnds[][]|[][]sausage[][]::[][]enumerated[][]) {[]
[] ::[][]output[][]([][]hWnd[][]);[]
[] }[]
[] }[]

[] {[]
[]// RangeもEnumerable[]
[]// (ただし、メンバ関数を使ってカスタマイズしたRangeのみ)[]
[]std[][]::[][]string[] []str[][]([][]"abcde"[][]);[]
[]BOOST_FOREACH[][] ([][]char[] []ch[][], [][]str[][]|[][]sausage[][]::[][]enumerated[][]) {[]
[]std[][]::[][]cout[][] << [][]ch[][];[]
[] }[]
[] }[]

[] {[]
[]// むちゃをしてみる (24個のスレッド)[]
[]BOOST_FOREACH[][] ([]
[]HWND[] []hWnd[][],[]
[]wnds[][]|[]
[]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[]
[]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[]
[]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[]
[]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[]
[]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[]
[]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[][]|[][]sausage[][]::[][]enumerated[]

[] ) {[]
[] ::[][]output[][]([][]hWnd[][]);[]
[] }[]
[] }[]
[]}[]