मैं बस उत्सुक हूं boost::variant
"कार्यान्वयन।
क्या यह इस तरह काम करता है?
दो सदस्य:
- वर्तमान में संग्रहीत प्रकार का प्रतिनिधित्व करने वाला एक नंबर (यानी पहले टेम्पलेट पैरामीटर के लिए 0, दूसरे टेम्पलेट पैरामीटर के लिए 1 आदि)
- सभी संभव प्रकारों का एक संघ (जो निश्चित रूप से सबसे बड़ा आकार है)।
apply_visitor()
:
एक switch
सही अधिभार को कॉल करने के लिए वर्तमान में संग्रहीत प्रकार का प्रतिनिधित्व करने वाले नंबर पर बयान (यह बदतर स्थिति में कूद तालिका के रूप में संकलित किया जाएगा ताकि स्थिर हो)।
मैं समझता हूँ कि वहाँ भी कई आशाएँ हैं जो सुनिश्चित कर सकती हैं boost::variant
विस्तृत रूप से मेमोरी को गतिशील रूप से आवंटित करने की आवश्यकता नहीं है यहाँ, लेकिन मुझे लगता है कि मुझे ये मिलते हैं।
उत्तर:
उत्तर № 1 के लिए 7यह आपके द्वारा वर्णित तरीके से बहुत अधिक काम करता है। कहानी संक्षिप्त में:
इसका पूर्णांक है
which
यह इंगित करता है कि कौन सा डेटा प्रकार उपयोग किया जाता है।स्टोरेज को बढ़ावा देने के लिए लागू किया गया है
aligned_storage
जो मूल रूप से अधिकतम डेटा आकार का एक बफर है। (यह एक संघ में है, लेकिन संरेखण प्रयोजनों के लिए)
अंत में, आगंतुक वास्तव में एक के साथ कार्यान्वित किया जाता है switch
सभी प्रकार की संभावनाओं के लिए मैक्रो का उपयोग करने के लिए संकलन समय पर उत्पन्न होता है।