如何用Boost.Spirit.Qi解析不同的结构?

时间:2010-09-25 13:37:13

标签: c++ parsing boost-spirit boost-spirit-qi boost-fusion

this example中,员工结构以“employee {int,string,string,double}”的形式进行解析。

我想知道是否可以修改此示例以解析不同类型的结构,例如“intern {int,string,string}”。

具体来说,我想将结构传递给结构类型上重载的函数。如果我可以避免为此使用多态双重调度,而是保留被解析为与正确的重载函数静态匹配的具体类型,那将是很好的。

1 个答案:

答案 0 :(得分:1)

当然,那是可能的。为要解析的每个类型创建规则:

rule<Iterator, std::string()> s = ...;
rule<Iterator, intern()> intern_r = int_ >> s >> s;
rule<Iterator, employee()> employee_r = int_ >> s >> s >> double_;

将这些组合成另一种选择:

rule<Iterator> r = 
        intern_r   [phoenix::bind(receive_intern, _1)]
    |   employee_r [phoenix::bind(receive_employee, _1)]
    ;

这假设你有两个处理解析数据的函数:

void receive_intern(intern const&);
void receive_employee(employee const&);

这就是你想要的吗?