Реализующий оператор деления
Я пишу простой калькулятор, используя повышение духа.
Я хочу, чтобы оператор деления генерировал исключение, если встречается нулевой знаменатель.
Я думаю в соответствии с
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*/)
])...
Тем не менее, чтобы это имело смысл, субъекту исключения не только нужно "лениво-бросать" "деление на ноль", но и неявный тип возвращаемого значения, совместимый с qi::_val
, Вот где я застрял. Есть ли что-то в Фениксе, что я могу использовать здесь, или мне нужно привязать к функции, закодированной вручную?
1 ответ
Boost Phoenix позволяет группировать выписки. Скобки используются для этого. Это, наряду с boost::phoenix::throw_
позволяет писать
(boost::phoenix::throw_("division by zero"), qi::_1)
в вашем ToDo
блок. qi::_1
не будет оцениваться, но (i) вы знаете, что оно будет оцениваться до 0, так как оно "провалит" if_else
и (ii) имеет правильный тип.