2010-09-25 22 views
1

this example中,員工結構以「employee {int,string,string,double}」的形式進行解析。如何使用Boost.Spirit.Qi解析不同的結構?

我想知道是否有可能修改這個例子來解析不同類型的結構,比如「intern {int,string,string}」。

具體來說,我想將結構傳遞給結構類型重載的函數。如果我可以避免爲此使用多態雙重分派,並且保留被解析的具體類型以靜態匹配正確的重載函數,那將是非常好的。

回答

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

這就是你想要的嗎?

+1

是的,這可以很好地工作,雖然編譯時間可能會相當高,許多不同的結構。有什麼我可以做的把它們分成不同的編譯單元嗎? – xDD 2010-09-25 15:19:40