View on GitHub

boost_spirit_guide

std::pairを読む(fusion)

boost/fusion/include/std_pair.hpp というヘッダーに
std::pair<T,U> を扱うための魔法が用意されています。
単に include するだけで動作します。

std::pair<int,int> 例

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

namespace qi = boost::spirit::qi;


template <typename Iterator, typename Skipper>
struct my_grammar : qi::grammar<Iterator, std::vector<std::pair<int,int>>(), Skipper> {
  qi::rule<Iterator, std::vector<std::pair<int,int>>(), Skipper>  start_;
  my_grammar() : my_grammar::base_type(start_, "my_grammar") {
    start_ = *( '{' >> qi::int_ >> ',' >> qi::int_ >> '}' );
  }
};

int main() {
  std::string input = "{ 1, 10 } { 100, 1000 } ";
  std::vector<std::pair<int,int>> v;
  my_grammar<std::string::iterator, qi::standard::space_type> myg;
  qi::phrase_parse( input.begin(), input.end(), myg, qi::standard::space, v );
  for( std::pair<int,int> p : v ) {
	  std::cout << p.first << " - " << p.second << std::endl;
  }
  return 0;
}