※このコードは開発中のものです。
メモ化のための、PStade.Ovenのmemoized RangeアダプタをBoost.Rangeのインタフェース/実装に合わせるよう移植しました。
ほぼそのまま持ってきただけです。
#include <iostream> #include <boost/range/adaptor/transformed.hpp> #include <boost/range/adaptor/filtered.hpp> #include <boost/range/adaptor/memoized.hpp> #include <boost/range/algorithm/for_each.hpp> int add(int x) { std::cout << "add function : " << x << std::endl; return x + 1; } bool pred(int x) { return true; } void disp(int x) { std::cout << x << std::endl; } int main() { using namespace boost::adaptors; const int ar[] = {1, 2, 3}; boost::for_each(ar | transformed(add) | memoized | filtered(pred), disp); }
add function : 1 2 add function : 2 3 add function : 3 4
コードはgithubに上がっています。
https://github.com/faithandbrave/OvenToBoost/
# 日本語のドキュメントが文字化けしてるのであとで直します・・・。