Boost.Phoenix の if で戻り値を返す
statement の if 文では、戻り値を返すことが出来ません。
次のようなコードはエラーになります。
[エラーコード]
namespace phx = boost::phoenix; using phx::arg_names::arg1; // phx::if_ の戻り値型は void boost::function<std::string(int)> f = phx::if_(arg1 >= phx::val(0))[ phx::val("true") ] .else_[ phx::val("false") ]; std::string str = f(3);
このような場合は、operator の if_else を使用することで解決することが出来ます。
[ソース]
#include <boost/phoenix/core.hpp> #include <boost/phoenix/operator.hpp> #include <boost/function.hpp> #include <iostream> #include <string> int main(){ namespace phx = boost::phoenix; using phx::arg_names::arg1; boost::function<std::string(int)> f = phx::if_else( arg1 >= phx::val(0), // cond phx::val("true"), // then phx::val("false") // else ); 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