C++ यहाँ कोड:
http://svn.boost.org/svn/boost/sandbox/variadic_templates/boost/composite_storage/pack/container_one_of_maybe.hpp
सही मायने में यह डुप्लिकेट प्रकार हो सकता है कि किसी टैग की संघ है। एक अच्छी सुविधा टैग्स गणना हो सकती है; इसलिए, टैग सार्थक नाम हो सकते हैं।
दुर्भाग्य से, संकलन समय लागत कार्यान्वयन पुनरावर्ती विरासत का उपयोग करता है क्योंकि, बहुत बुरा, मुझे लगता है है। ओटीओएच, संकलन समय लागत को कम करने के लिए शायद संकलक को एक तरह से समझेंगे।
ओटीओएच, यदि आप बूस्ट :: संस्करण के साथ चिपकना चाहते हैं, तो आप मार्क बी के सुझाव के अनुसार टाइप कर सकते हैं। हालांकि, मार्क बी के वर्णनात्मक वर्ग के नामों के बजाय, जिसके लिए कुछ विचारों की आवश्यकता है, आप fusion::pair<mpl::int_<tag>,T_tag>
का उपयोग कर सकते हैं जहां T_tag
स्रोत fusion::vector
में टैग-वें तत्व है। IOW:
variant
< fusion::pair<mpl::int_<1>,T1>
, fusion::pair<mpl::int_<2>,T2>
...
, fusion::pair<mpl::int_<n>,Tn>
>
संलयन डॉक्स के रूप में:
http://www.boost.org/doc/libs/1_55_0/libs/fusion/doc/html/fusion/support/pair.html
कहते हैं, fusion::pair
केवल 2 टेम्पलेट तर्क के लिए जगह आवंटित; इसलिए, इसे boost::variant<T1,T2,...,Tn>
से अधिक कक्ष नहीं लेना चाहिए।
एचटीएच।
-regards, लैरी
दो समान प्रकार के क्यों? एक संघ के केवल एक सदस्य का इस्तेमाल किसी भी समय किया जा सकता है। – hmjd
मुझे पता है लेकिन ऐसे मामले हैं जब आप सदस्य को विचलित करना चाहते हैं भले ही उनके पास समान अंतर्निहित प्रकार हो। एक छोटा सा उदाहरण एक इंप्रप्रस प्रकार होगा जिसमें int के इंटकॉन्स्ट int और Int intututable int। – maattdd
लेकिन कहीं और कुछ ध्वज होना चाहिए (जिसमें 'struct' या 'class' शामिल है) जो इंगित करता है कि संघ का कौन सा सदस्य _active_ है? इसका उपयोग अतिरिक्त आवश्यक अर्थ प्रदान करने के लिए किया जा सकता है। – hmjd