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)
我可以做些什么,以便根据比较器的值仅评估一个表达式吗?
使用boost::phoenix::if_elseC++ 三元运算符的角色公式:
>> (comparator >> ',' >> expression >> ',' >> expression) [qi::_val = boost::phoenix::if_else(qi::_1, qi::_2, qi::_3)]
(与所有其他代码行保持原样)。
这意味着仅评估qi::_2和之一。qi::_3
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |