Допустим, у меня есть грамматика, определенная для чего-то вроде:
some_rule := a b [c [d]]
где c
и d
являются необязательными и по умолчанию имеют определенное значение (скажем, 14), если не задано. Могу ли я получить значение по умолчанию для 14, если значение не указано? Я хочу, чтобы полученный std::vector
всегда был размером 4.
Самое близкое, что я пришел, похоже на следующее:
qi::rule<Iterator, std::vector<int>(), ascii::space_type> some_rule;
some_rule %= int_ >> int_ >> -int_ >> -int_;
// ...
some_other_rule = some_rule[&some_callback_for_int_vectors];
, который затем получит 0 для необязательных значений, которые не отображаются (я полагаю). Затем я меняю последовательные 0 в конце на 14. Это не только ужасно неправильно, но и просто не элегантно. Есть ли лучший способ сделать это?