我想用 Boost Spirit 将带有双对序列的字符串解析为 std::map 。
我改编了来自 http://svn.boost.org/svn/boost/trunk/libs/spirit/example/qi/key_value_sequence.cpp的示例, 但我在为键和值定义正确的 qi::rule 时遇到问题:
template <typename Iterator>
struct keys_and_values : qi::grammar<Iterator, std::map<double, double> >
{
keys_and_values()
: keys_and_values::base_type(query)
{
query = pair >> *(qi::lit(',') >> pair);
pair = key >> value;
key = qi::double_;
value = +qi::double_;
}
qi::rule<Iterator, std::map<double, double>()> query;
qi::rule<Iterator, std::pair<double, double>()> pair;
qi::rule<Iterator, std::string()> key, value;
};
我不能将 double() 用于键和值规则,并且不能从 double 构造 std::string。