1

此示例中,员工结构以“employee{int, string, string, double}”的形式解析。

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

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

4

1 回答 1

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)]
    ;

这假设您有 2 个处理解析数据的函数:

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

那是你要的吗?

于 2010-09-25T15:09:51.413 回答