Как я могу проанализировать различные структуры с Boost.Spirit.Qi? - PullRequest
1 голос
/ 25 сентября 2010

В в этом примере структуры сотрудников анализируются в форме "employee {int, string, string, double}".

Я хотел бы знать, возможно ли изменить этот пример, чтобы он также анализировал различные типы структур, например, "intern {int, string, string}".

В частности, я бы хотел передать структуру функции, перегруженной типом структуры. Было бы замечательно, если бы я мог избежать использования полиморфной двойной диспетчеризации для этого и вместо этого сохранить конкретный тип, который анализируется для статического соответствия правильной перегруженной функции.

1 Ответ

1 голос
/ 25 сентября 2010

Конечно, это возможно.Создайте правило для каждого из типов, которые вы хотите проанализировать:

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

Это то, что вы хотите?

...