在此示例中,员工结构以“employee{int, string, string, double}”的形式解析。
我想知道是否可以修改此示例以解析不同类型的结构,例如“intern{int, string, string}”。
具体来说,我想将结构传递给在结构类型上重载的函数。如果我可以避免为此使用多态双重分派,而是保留被解析的具体类型以静态匹配正确的重载函数,那就太好了。
在此示例中,员工结构以“employee{int, string, string, double}”的形式解析。
我想知道是否可以修改此示例以解析不同类型的结构,例如“intern{int, string, string}”。
具体来说,我想将结构传递给在结构类型上重载的函数。如果我可以避免为此使用多态双重分派,而是保留被解析的具体类型以静态匹配正确的重载函数,那就太好了。
当然,这是可能的。为要解析的每种类型创建一个规则:
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&);
那是你要的吗?