我正在使用提升精神编写一个简单的计算器。
如果遇到零分母,我希望除法运算符抛出异常。
我正在思考
term =
factor [qi::_val = qi::_1]
>> *(('*' >> factor [qi::_val *= qi::_1])
|
('/' >> factor
[qi::_val = boost::phoenix::if_else(
qi::_1,
qi::_val / qi::_1,
/*ToDo some exception actor here*/)
])...
然而,为了理所当然,异常actor不仅需要懒惰抛出“除以零”,而且还必须具有与qi::_val
兼容的隐式返回类型。那就是我被困住的地方。我可以在这里使用凤凰中的某些东西,还是需要绑定到手工编码的函数?
答案 0 :(得分:3)
Boost Phoenix允许您分组语句。括号用于做到这一点。这与boost::phoenix::throw_
一起允许您编写
(boost::phoenix::throw_("division by zero"), qi::_1)
在ToDo
块中。 qi::_1
将不会被评估,但是(i)你知道它将评估为0,因为它将会失败" if_else
和(ii)它的类型正确。