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