在this example中,员工结构以“employee {int,string,string,double}”的形式进行解析。
我想知道是否可以修改此示例以解析不同类型的结构,例如“intern {int,string,string}”。
具体来说,我想将结构传递给结构类型上重载的函数。如果我可以避免为此使用多态双重调度,而是保留被解析为与正确的重载函数静态匹配的具体类型,那将是很好的。
答案 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&);
这就是你想要的吗?