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