c++ - How can I parse different structures with Boost.Spirit.Qi? -


इसमें कर्मचारी कर्मचारी को "कर्मचारी {int, string, string, double}" के रूप में पार्स किया जाता है।

मैं जानना चाहूंगा कि क्या इस उदाहरण को संशोधित करने के लिए विभिन्न प्रकार के स्ट्रैक्ट्स को भी पार्स करना संभव है, जैसे कि "intern {int, string, string}"।

विशेष रूप से, मैं तब चाहूंगा संरचना प्रकार पर अतिभारित फ़ंक्शन के लिए संरचना को पास करें। यह बहुत अच्छा होगा यदि मैं इसके लिए बहुलोफिक डबल डिस्पैच का उपयोग कर से बचा सकता हूं, और इसके बजाय कंक्रीट प्रकार को सुरक्षित रखता हूं जो सही ओवरलोडेड फ़ंक्शन से स्थिर रूप से मेल खाता हो जाता है।

ज़रूर, यह संभव है। प्रत्येक प्रकार के लिए एक नियम बनाएँ जिसे आप पार्स करना चाहते हैं:

  नियम & lt; Iterator, std :: string () & gt; S = ...; नियम & lt; इटरेटर, इंटर्न () & gt; Intern_r = int_ & gt; & gt; एस & gt; & gt; रों; नियम & lt; इटरेटर, कर्मचारी () & gt; Employee_r = int_ & gt; & gt; एस & gt; & gt; एस & gt; & gt; double_;  

और एक विकल्प में उन्हें जोड़ती है:

  नियम & lt; Iterator & gt; R = intern_r [phoenix :: bind (receive_intern, _1)] | | Employee_r [फीनिक्स :: बाइंड (प्राप्त- कर्मचारी, _1)];  

यह मानता है कि आपके पास पर्सेड डेटा को संभालने वाले 2 फ़ंक्शन होते हैं:

  शून्य प्राप्त_इनंतर (इंटरेन्ट एंड amp;); शून्य प्राप्त- कर्मचारी (कर्मचारी कॉन्स्ट एंड amp;);  

क्या आप चाहते हैं?


Comments