Boost.Phoenix で再帰処理 その2

アンドキュメントですが、Boost.Phoenix に this_ が用意されていて、こんな事が出来るみたいです。

[ソース]

#include <boost/phoenix.hpp>
#include <boost/phoenix/scope/this.hpp>
#include <iostream>


int
main(){
    namespace phx = boost::phoenix;
    using phx::arg_names::arg1;
    
    phx::if_(arg1 <= 0)[
        std::cout << arg1 << std::endl
    ]
    .else_[
        std::cout << arg1 << std::endl,
        phx::this_(arg1 - 1)
    ](10);
    
    return 0;
}

[出力]

10
9
8
7
6
5
4
3
2
1
0

こんな感じで自分を呼び出すことが出来るみたいです。
ただし、他の statement や、if_else だと使えないみたいです(アンドキュメントなので使い方が違うだけかも知れませんが…)。

// 両方共エラー
phx::let(_a = phx::val(arg1))[
    phx::if_(_a <= 0)[
        std::cout << _a << std::endl
    ]
    .else_[
        std::cout << _a << std::endl,
        this_(_a - 1)
    ]
](10);

phx::if_else(arg1 != 0, phx::this_(arg1 - 1), arg1)(10);

(´・ω・`)ショボーン
今後実装されたりするのでしょうか…?

[boost]

  • ver 1.47.0