Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Number List - stuffing numbers into a std::vector

This sample demonstrates a parser for a comma separated list of numbers and using a semantic action to collect the numbers into a std::vector.

template <typename Iterator>
bool parse_numbers(Iterator first, Iterator last, std::vector<double>& v)
{
    using x3::double_;
    using x3::phrase_parse;
    using x3::_attr;
    using ascii::space;

    auto push_back = [&](auto& ctx){ v.push_back(_attr(ctx)); };

    bool r = phrase_parse(first, last,

        //  Begin grammar
        (
            double_[push_back]
                >> *(',' >> double_[push_back])
        )
        ,
        //  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/x3/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.

[&](auto& ctx){ v.push_back(_attr(ctx)); }

PrevUpHomeNext