Phoenix で variant を返す条件演算子
Boost.Phoenix の if で戻り値を返す - C++でゲームプログラミング
Phoenix の if_else は then 節と else 節の common_type を返しますが,それらの型が異なる場合は variant に収めて返すという戦略もあるでしょう.Phoenix ではそのような条件演算子もユーザーが書くことができます (Proto の知識は必要ありません).
if2.hpp
https://gist.github.com/1130400
if2.cpp
#include <iostream> #include <boost/phoenix/core/argument.hpp> #include <boost/phoenix/core/value.hpp> #include <boost/phoenix/operator/arithmetic.hpp> #include <boost/phoenix/operator/comparision.hpp> #include "if2.hpp" int main() { using namespace boost::phoenix; using namespace boost::phoenix::arg_names; // divide = \x y -> if y == 0 then Left "division by zero" else Right (x `div` y) auto const divide = if2(arg2 == 0, val("division by zero"), arg1 / arg2); std::cout << divide(54, 6) << '\n'; // 9 std::cout << divide(54, 0) << '\n'; // division by zero }