読者です 読者をやめる 読者になる 読者になる

Boost.Spirit.Qi vector<char>をパースする

C++

vector<char>はparse関数に渡せるのか気になったのでやってみました。

#include <iostream>
#include <string>
#include <vector>
#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/io.hpp>

namespace fusion = boost::fusion;
namespace qi = boost::spirit::qi;

int main()
{
    const std::string s = "123,abc,Hello";
    const std::vector<char> input(s.begin(), s.end());

    fusion::vector<int, std::string, std::string> result;

    std::vector<char>::const_iterator it = input.begin();
    if (!qi::parse(it, input.end(),
                qi::int_ >> ',' >> *(qi::char_ - ',') >> ',' >> *(qi::char_ - qi::eoi),
                result)) {
        std::cout << "parse error" << std::endl;
    }

    std::cout << result << std::endl;
}
(123 abc Hello)

できました。