Эта выборка демонстрирует парсер для запятой разделенного списка чисел. Числа вставляются в вектор с помощью феникса.
template <typename Iterator>
bool parse_numbers(Iterator first, Iterator last, std::vector<double>& v)
{
using qi::double_;
using qi::phrase_parse;
using qi::_1;
using ascii::space;
using phoenix::push_back;
bool r = phrase_parse(first, last,
(
double_[push_back(phoenix::ref(v), _1)]
>> *(',' >> double_[push_back(phoenix::ref(v), _1)])
)
,
space);
if (first != last)
return false;
return r;
}
The full cpp file for this example can be found here: ../../example/qi/num_list2.cpp
Это, опять же, тот же парсер, что и раньше. На этот раз вместо того, чтобы суммировать цифры, мы засунем их в<std::vector>.<push_back>поставляется компаниейPhoenix. Выражение:
push_back(ref(v), _1)
Прибавьте урезанное число. Как и раньше,<_1>являетсяФениксзаполнителем для парсированного атрибута результата. Как и раньше,<ref(v)>Феникс, что<v>,<std::vector>, является изменчивой ссылкой.