我正在尝试使用其他参数动态构建解析器boost::spirit:qi
。目标是解析字符串并std::map<std::string, std::string>
使用键和值填充 a。但是,map 的 key 字段是不被解析的(即在解析器生成之前就知道了)。
我猜我需要编写一个语义操作,将地图的键设置为适当的解析值。我可以看到它qi::_1
提供了解析器的内容,但是我如何引用返回结构(在本例中为 a std::map
)?
如果std::map
在范围内,我可以像这样直接分配它:
parser = lit(prefix) >> value_parser[map_[key] = _1];
但就我而言,我想实际生成一个解析器,而不是进行解析。我猜我需要一些东西来代替map_[key]
。
提供更多上下文(根据要求):
我首先解析一个看起来像这样的“模板”字符串:
/path/to/:somewhere:/nifty.json
:somewhere:
用于表示以后可以通过 name 引用的任何字符串somewhere
。我的解析器运行良好。
接下来,我想从该模板生成另一个解析器,它解析这样的字符串:
/path/to/anywhere/nifty.json
并为我提供一个std::map<std::string, std::string> m
where m["somewhere"] == "anywhere"
。