/ / बढ़ावा :: संस्करण कार्यान्वयन - सी ++, बढ़ावा, बढ़ावा-संस्करण

boost :: संस्करण कार्यान्वयन - सी ++, बूस्ट, बूस्ट-वेरिएंट

मैं बस उत्सुक हूं boost::variant"कार्यान्वयन।

क्या यह इस तरह काम करता है?

दो सदस्य:

  1. वर्तमान में संग्रहीत प्रकार का प्रतिनिधित्व करने वाला एक नंबर (यानी पहले टेम्पलेट पैरामीटर के लिए 0, दूसरे टेम्पलेट पैरामीटर के लिए 1 आदि)
  2. सभी संभव प्रकारों का एक संघ (जो निश्चित रूप से सबसे बड़ा आकार है)।

apply_visitor():

एक switch सही अधिभार को कॉल करने के लिए वर्तमान में संग्रहीत प्रकार का प्रतिनिधित्व करने वाले नंबर पर बयान (यह बदतर स्थिति में कूद तालिका के रूप में संकलित किया जाएगा ताकि स्थिर हो)।

मैं समझता हूँ कि वहाँ भी कई आशाएँ हैं जो सुनिश्चित कर सकती हैं boost::variant विस्तृत रूप से मेमोरी को गतिशील रूप से आवंटित करने की आवश्यकता नहीं है यहाँ, लेकिन मुझे लगता है कि मुझे ये मिलते हैं।

उत्तर:

उत्तर № 1 के लिए 7

यह आपके द्वारा वर्णित तरीके से बहुत अधिक काम करता है। कहानी संक्षिप्त में:

  1. इसका पूर्णांक है which यह इंगित करता है कि कौन सा डेटा प्रकार उपयोग किया जाता है।

  2. स्टोरेज को बढ़ावा देने के लिए लागू किया गया है aligned_storage जो मूल रूप से अधिकतम डेटा आकार का एक बफर है। (यह एक संघ में है, लेकिन संरेखण प्रयोजनों के लिए)

अंत में, आगंतुक वास्तव में एक के साथ कार्यान्वित किया जाता है switchसभी प्रकार की संभावनाओं के लिए मैक्रो का उपयोग करने के लिए संकलन समय पर उत्पन्न होता है।