- 4 名前:デフォルトの名無しさん [2009/01/06(火) 01:24:05 ]
- #include <iostream>
#include <iterator> #include <string> #include <vector> #include <cctype> #include <pstade/oven/transformed.hpp> #include <pstade/oven/copied.hpp> #include <pstade/oven/copied_to.hpp> int main() { using namespace pstade::oven; std::string s = "HogeFooBar"; std::vector<char> v = s | transformed(std::toupper) | copied; //当然パイプにパイプを重ねることが可能 v | copied_to(std::ostreambuf_iterator<char>(std::cout)); std::cout << std::endl; } 出力: HOGEFOOBAR transformedやcopied_toのように、関数呼出の形で引数を与えるものもある。 transformedは各要素に与えられた関数を適用したレンジを返す。Lispでいうmapだな。 もちろん関数オブジェクトも可。Boost.Lambdaもいけるはず。 copiedはここで打ち止めの意、vectorなどのコンテナへ初期化・代入できるようになる。ただし、std::stringへは上手くいかないようだ。 Ovenで | を通した結果の型はテンプレートの塊なので、どんな型か考えない方がいい。この点、C++0xのautoがやや待ち遠しい。 copied_toは指定された出力イテレータにコピーを送る。それは副作用としてなので、さらにパイプを続けられたはず。
|

|