1

このでは、employee構造体は「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 に答える