c++ - How to return heap allocated values in Boost Spirit Qi -


के रूप में मेरे पास एक वर्ग है:

  class test {शून्य सेट वर्सन (संस्करण * संस्करण ); संस्करण * संस्करण () कॉन्स्ट; निजी: संस्करण * m_version; };   

जिसे मैं BOOST_FUSION_ADAPT_ADT का उपयोग करके अनुकूलित किया है, मैं यह जानना चाहूंगा कि कैसे मैं व्याकरण के नियमों को लिख सकता हूं जो विफल होने पर बिना लीक किए संस्करण के ऑप्शंस को ढेर कर देता है। एक तरह से मैंने खोज की है

  [_val = phoenix :: new_ & lt; संस्करण & gt; (संस्करण (0))]   

अर्थ क्रियाओं में लेकिन यह मेरे लिए एक गंदे समाधान की तरह लगता है ध्यान दें कि आमतौर पर मैं ढेर आवंटित ऑब्जेक्ट्स का उपयोग नहीं करता हूं, लेकिन इस मामले में एपीआई पॉइंटर्स के साथ पहले से ही तय हो चुकी है।

  1. वास्तव में, यहां पॉइंटर्स का उपयोग न करें
  2. मेरा मतलब है, अपनी समस्या पर पुनर्विचार करें हां, मैं कुछ तरीकों के बारे में सोच सकता हूं, जिसमें आप बैक ट्रैकिंग पर लुकने की समस्या के आसपास हैक कर सकते हैं, लेकिन वे सभी बदसूरत, त्रुटि प्रवण और सबसे महत्वपूर्ण रूप से शायद अनावश्यक हो।

    1. गैर-स्वामित्व वाली सूचक द्वारा - संस्करण संदर्भित क्यों करेगा?

      ठीक है, सबसे उचित विवरण उस संस्करण में होगा मोटे तौर पर जुड़ा हुआ डेटा और अन्य चीजें (सीरियललाइज़ेशन रणनीतियों, लॉगिंग, वैल्यूएशन स्ट्रेंफ आदि) हो सकती हैं। संस्करण मिश्रण में किसी भी क्रम-बहुरूपिक व्यवहार को शामिल कर सकता है)।

      यह जानकारी किसी भी ऑब्जेक्ट को "बाहरी" होगी जो किसी संस्करण के "संबंधित" है, इसलिए यह समझ में आता है कि इस संस्करण "मेटा जानकारी" का स्वामित्व और बहुरूपृत नहीं होगा। < / li>

    2. इसका क्या मतलब है?

      मेरे विचार में इसका मतलब यह है कि पार्सिंग के दौरान जो भी संस्करण हो सकता है, उसे पार्सिंग की शुरुआत में पहले से ही जाना होगा। उस स्थिति में, संस्करण को सभी पर संस्करण के गतिशील रूप से (बहुत से, संभावित डुप्लिकेट) उदाहरणों के लिए कोई ज़रूरत नहीं होगी।

    3. हाँ, लेकिन क्या हुआ अगर यह नहीं है?

      मान लें कि आपके पास इस "संस्करणों की तालिका" प्रारंभ में उपलब्ध नहीं है। सभी प्रकार के हूड में, आप एएसटी में प्रत्येक नोड को version के अपने स्वयं के अनूठे उदाहरण के साथ समाप्त नहीं करना चाहते हैं भले ही यह उसी संस्करण को संदर्भित करता है इसलिए, आपको संभवत: फ़ैक्टरी फ़ंक्शन बनाना चाहिए

      • (अद्वितीय) संस्करणों की एक "साझा की गई तालिका" बनाए रखता है
      • पार्सिंग के दौरान वर्जन आइटम्स को देखने में सक्षम है (ताकि आप

      • वैकल्पिक रूप से एक नया संस्करण ऑब्जेक्ट को तत्काल तब्दील कर सकता है - और केवल तभी - यह अभी तक मौजूद नहीं है

        अब यह तालिका सभी संस्करण उदाहरणों का स्वामी हो सकती है, और जब आप उनके साथ काम कर लेते हैं, तो वे सभी को तुरंत एक बार मुफ्त में कर सकते हैं।

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -