Конечно, это возможно.Создайте правило для каждого из типов, которые вы хотите проанализировать:
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 функции, обрабатывающие проанализированные данные:1007 *
void receive_intern(intern const&);
void receive_employee(employee const&);
Это то, что вы хотите?