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[][]);[]
[] }[]
[] }[]
[]}[]