More Related Content Similar to Read egg oven (20) More from Kohsuke Yuasa (11) Read egg oven4. はじめに。
●
この発表の主なターゲット
● 日常的にBoostを使ってる人or使われている人
5. はじめに。
●
この発表の主なターゲット
● 日常的にBoostを使ってる人or使われている人
● 日常的にPStade.Oven, PStade.Eggを使ってい
る人
6. はじめに。
●
この発表の主なターゲット
● 日常的にBoostを使ってる人or使われている人
● 日常的にPStade.Oven, PStade.Eggを使ってい
る人
● EggやOvenの実装に興味がある人
8. PStadeとは?
● Shunsuke Sogame氏によって開発された、
C++ Template Libraryです。
● Biscuit Parser Library
● Ketchup Message Map Library
● Egg Functional Library
● Oven Range Library
などが含まれています。
9. PStadeとは?
● Shunsuke Sogame氏によって開発された、
C++ Template Libraryです。
● Biscuit Parser Library
● Ketchup Message Map Library
● Egg Functional Library
● Oven Range Library ← 今日はこの2つを
取り上げます
などが含まれています。
10. PStade.Egg
● A framework of making function objects.
“http://p-stade.sourceforge.net/”
● Egg is a small header-only framework of
building functions, and offers higher-order
functions.
“Introduction”
“http://p-stade.sourceforge.net/egg/doc/html/”
11. PStade.Oven
● A Boost.Range Extension Library
“http://p-stade.sourceforge.net/”
● Oven is an advanced implementation of
Range Library Proposal
“Introduction”
“http://p-stade.sourceforge.net/oven/doc/html/”
12. PStade.Oven
● そして、PStade.Ovenの実装には、PStade.Egg
が使われています。
● なので、Ovenを読もうと思うと、Eggを読む必
要がある。
● 逆にEggを読めば、Ovenの理解も進みます。
14. Ovenの使用例
namespace oven = pstade::oven;
std::string const x = "ab123cde5f";
oven::copy(
x
| oven::filtered(isalpha)
| oven::transformed(toupper),
std::ostream_iterator<char>(std::cout) );
//outputs : ABCDEF
15. Ovenの使用例
Range
namespace oven = pstade::oven;
std::string const x = "ab123cde5f";
oven::copy(
x
| oven::filtered(isalpha)
| oven::transformed(toupper),
std::ostream_iterator<char>(std::cout) );
//outputs : ABCDEF
16. Range
●
何らかの値の列の範囲を表す物
● 生配列, std::vector, std::list, std::map,
boost::array, etc, …
●
コンテナじゃなくても、例えば指定された範囲
の自然数列を返すcounting rangeなんてものも
ある。
17. Ovenの使用例
namespace oven = pstade::oven;
std::string const x = "ab123cde5f";
oven::copy(
Range Adaptor
x
| oven::filtered(isalpha)
| oven::transformed(toupper),
std::ostream_iterator<char>(std::cout) );
//outputs : ABCDEF
18. Range Adaptor
● Iterator AdaptorのRange版
● Rangeを横断しながら、値を変更したりスキッ
プしたりして、元のRangeから別のRangeを返
す。
● 遅延評価によって、実際にRangeの値が参照さ
れるときに、その処理の間に入って働くため、
● 元のRangeは変更しない。
● 返されるRangeはいちいち元のRangeを全部コピー
しているわけではない。
● 計算量/空間量的にお得。
19. Range Adaptor
● Range Adaptorはパイプ演算子でつなげていく
ことが出来る。
range_ | adaptor1 | adaptor2 | …
●
効果が順次適用されていく
20. Ovenの使用例
namespace oven = pstade::oven;
std::string const x = "ab123cde5f";
oven::copy(
x
| oven::filtered(isalpha)
Range Based Function
| oven::transformed(toupper),
std::ostream_iterator<char>(std::cout) );
//outputs : ABCDEF
21. Range-Based Function
● STLのアルゴリズム(copy, sort, findなど)はイテ
レータのbeginとendを引数に取る。
● これはIterator-Based Functionと呼ばれる。
●
使い勝手があんまりよくない。バグを埋めこん
でしまう可能性も高い。
● Iteratorのbeginとendをまとめたもの(=Range)
を渡せるようにすればより使いやすい。
22. Range-Based Function
●
ここら辺については、
● Exceptional C++
● プログラミングの魔導書vol.1
”オーブンレンジクッキング”
●
プログラミングの魔導少女
“RangeとPStade.Oven”
●
などなどに情報があります。
24. Ovenの使用例
namespace oven = pstade::oven;
std::string const x = "ab123cde5f";
oven::copy(
x
| oven::filtered(isalpha)
| oven::transformed(toupper),
std::ostream_iterator<char>(std::cout) );
//outputs : ABCDEF