PSTADE_OVEN_FOREACH

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