|  | Home | Libraries | People | FAQ | More | 
This sample demonstrates a parser for a comma separated list of numbers. The numbers are inserted in a vector using phoenix.
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, // Begin grammar ( double_[push_back(phoenix::ref(v), _1)] >> *(',' >> double_[push_back(phoenix::ref(v), _1)]) ) , // End grammar space); if (first != last) // fail if we did not get a full match return false; return r; }
The full cpp file for this example can be found here: ../../example/qi/num_list2.cpp
          This, again, is the same parser as before. This time, instead of summing
          up the numbers, we stuff them in a std::vector.
          push_back is supplied by
          Boost.Phoenix.
          The expression:
        
push_back(ref(v), _1)
          appends the parsed number. Like before, _1
          is a Boost.Phoenix
          placeholder for the parsed result attribute. Also, like before, ref(v) tells
          Boost.Phoenix
          that v, the std::vector, is a mutable reference.