我有一個令人尷尬的簡單問題,我似乎無法包住我的頭。我正在閱讀關於how to parse into structs的增強文檔。該章節的sample code provided很簡單 - 或者我認爲。我想做一個超級簡單的改變。試圖理解Boost Qi解析爲結構
我要拆分的啓動規則:
start %=
lit("employee")
>> '{'
>> int_ >> ','
>> quoted_string >> ','
>> quoted_string >> ','
>> double_
>> '}'
;
...分成兩個(或更高版本以上)的規則,就像這樣:
params %=
>> int_ >> ','
>> quoted_string >> ','
>> quoted_string >> ','
>> double_;
start %=
lit("employee")
>> '{'
>> params
>> '}'
;
不管是什麼我已經試過我無法正確地將值解析到employee結構中。即使當我得到一個識別輸入的正在運行的程序時,屬性也沒有寫入結構。看起來只有在「頂級」規則中指定了所有內容時,解析才能正常工作。當然,我錯了?!對於我實際需要實現的解析器,我肯定需要更結構化的方法。
另外我不清楚params規則的正確類型應該是什麼。我想qi::rule<Iterator, fusion::vector<int, std::string, std::string, double>, ascii::space_type>
,但我的編譯器似乎並不對此很感興趣......
我要指出,我與升壓v1.46.1
哦,天哪......臨屋恩,你,sehe!我一直在期待你的答案:)你碰巧知道爲什麼在這種情況下fusion :: vector不能隱式轉換爲目標結構體?您能否將我指向文檔中的相關章節? – djf 2014-10-20 10:33:50
我認爲屬性兼容性規則控制_synthesized_屬性如何轉換爲_exposed屬性_。然而,在你的情況下,它已經是規則定義中的_exposed_屬性類型,因此不容易出現這種兼容性規則(?)。我只能說,通過返回as-if綜合屬性類型來僞裝規則<>'「是一種典型的做法。我不認爲我們可以指出任何直接的文檔(事實上,這是通過設計:屬性compat。magic應該是「直觀的」和實現細節,理想情況下) – sehe 2014-10-20 11:26:59