Boost.Spirit.Qi 文字列を要素とするカンマ区切り文字列のパース

ちょっと嵌ったのでメモ。

#include <iostream>
#include <vector>
#include <string>
#include <boost/spirit/include/qi.hpp>
#include <boost/range/algorithm/for_each.hpp>
#include <boost/lambda/lambda.hpp>

std::vector<std::string> parse_string_csv(const std::string& s)
{
    namespace qi = boost::spirit::qi;

    std::vector<std::string> result;
    if (s.empty())
        return result;

    std::string::const_iterator it = s.begin();
    qi::phrase_parse(it, s.end(), *(qi::char_ - ',') % ',', qi::space, result);
    return result;
}


int main()
{
    boost::for_each(parse_string_csv("abc, xyz"), std::cout << boost::lambda::_1 << '\n');
}
abc
xyz