Boost.Phoenix の if 文の戻り値を let を使用して返す

前回の続き。
statement の if 文ないで、let で定義するローカル変数に結果を代入して、値を返すことが出来ます。

[ソース]

#include <boost/phoenix/core.hpp>
#include <boost/phoenix/operator.hpp>
#include <boost/phoenix/scope.hpp>
#include <boost/phoenix/statement/if.hpp>
#include <boost/function.hpp>
#include <string>
#include <iostream>

int
main(){
    namespace phx = boost::phoenix;
    using phx::arg_names::arg1;
    using phx::local_names::_a;
    
    // if 文の中で代入して、返す
    boost::function<std::string(int)> f = phx::let(_a = phx::val(""))[
        if_(arg1 >= 0)[
            _a = phx::val("true")
        ]
        .else_[
            _a = phx::val("false")
        ],
        _a
    ];
    std::cout << f(3) << std::endl;
    std::cout << f(-3) << std::endl;
    std::cout << f(0) << std::endl;

    return 0;
}

[出力]

true
false
true

[boost]

  • ver 1.47.0