使用惰性求值实现三元类型 if

P45*_*ent 3 boost-spirit boost-spirit-qi

我正在为一个if函数实现一个生产规则:

qi::rule<Iterator, ascii::space_type, double(void)> f_if;
f_if = qi::ascii::string("if")
            >> qi::char_('(')
            >> (comparator >> ',' >> expression >> ',' >> expression) [qi::_val = boost::phoenix::bind(&Grammar<Iterator>::function_if, this, qi::_1, qi::_2, qi::_3)]
            >> qi::char_(')')
            ;
Run Code Online (Sandbox Code Playgroud)

表达式比较器声明为

qi::rule<Iterator, ascii::space_type, double(void)> expression;
qi::rule<Iterator, ascii::space_type, bool(void)> comparator;
Run Code Online (Sandbox Code Playgroud)

并且绑定函数具有原型

 double function_if(bool comparator, double left, double right);
Run Code Online (Sandbox Code Playgroud)

我可以做些什么,以便根据比较器的值仅评估一个表达式吗?

Bat*_*eba 5

使用boost::phoenix::if_elseC++ 三元运算符的角色公式:

>> (comparator >> ',' >> expression >> ',' >> expression) [qi::_val = boost::phoenix::if_else(qi::_1, qi::_2, qi::_3)]

(与所有其他代码行保持原样)。

这意味着仅评估qi::_2和之一。qi::_3