【发布时间】:2017-11-08 06:33:55
【问题描述】:
此代码有效。这个问题是关于让它(看起来)更好。
我看过有关utrees 的文章,但我不确定这是最好的方法。
让我给你看代码的“丑陋”版本,它使用construct<>
newcall =(nocaselit(L"new") > tyname)
[_val = construct<common_node>(type_cmd_new,key_typename, construct<std::wstring>(_1))];
将规则声明为:
qi::rule<Iterator, common_node(), Skipper> newcall
qi::rule<Iterator, std::wstring()> tyname;
目标公共AST节点为:
struct common_node {
template <typename X>
common_node(node_type t, node_key k1, const X & m1)
第一个参数是节点类型,第二个是某种成员键,最后一个是作为模板参数给出的有效负载(后来存储在一个变体中)。
我们可以避免使用construct 模板吗?
【问题讨论】:
-
utree从未发展到真正有用的程度。
标签: c++ boost-spirit boost-spirit-qi boost-phoenix