BOOST_FOREACHのようなforeach文マクロは、PStade.Ovenにも用意されていて、
OvenのほうはPSTADE_OVEN_FOREACHマクロを使用します。
OvenのはBoostのものと使い方はほとんど同じですが、Boostとは違って要素の型を推論してくれます。
たとえば、昨日のプログラムは以下のように書き直すことができます。
#include <iostream> #include <pstade/oven/as_c_str.hpp> #include <pstade/oven/sorted.hpp> #include <pstade/oven/uniqued.hpp> #include <pstade/oven/foreach.hpp> using namespace pstade::oven; #define foreach PSTADE_OVEN_FOREACH int main() { foreach (c, as_c_str("314123")|sorted|uniqued) { std::cout << c << std::endl; } }
Boost↓
foreach (char c, as_c_str("314123")|sorted|uniqued)
Oven↓
foreach (c, as_c_str("314123")|sorted|uniqued)
要素の型がローカルでもtypedefしなければならないくらい長い場合は重宝しそうです。
あと、Ovenのforeachは右辺値をコピーしないんだそうです。
(Boostのforeachは関数の戻り値をforeachに渡したとき、2回以上関数が評価されないようにコピーしてる)
【参考】
PSTADE_OVEN_FOREACH