परावर्तन टीएस: एनमों का स्थिर प्रतिबिंब (और अन्य प्रकार)
परावर्तन TS , विशेष रूप से [ प्रतिबिंबित. ops.enum] / परावर्तन TS ड्राफ्ट के नवीनतम संस्करण का 2 get_enumerators TransformationTraitऑपरेशन प्रदान करता है :
[Reflect.ops.enum] / 2
template <Enum T> struct get_enumerators
आवश्यकताओं के सभी विशेषज्ञताओं get_enumerators<T>को पूरा
TransformationTraitकरना होगा (20.10.1)। नेस्टेड प्रकार नामित
typeमेटा-ऑब्जेक्ट प्रकार को संतुष्ट करता है
ObjectSequence, जिसमें ऐसे तत्व होते हैं जो संतुष्ट करते हैं Enumeratorऔर परिलक्षित प्रकार के एन्यूमरेटर्स को प्रतिबिंबित करते हैं T।
[परावर्तित करें। ड्राफ्ट.ओबसेक] ड्राफ्ट के ObjectSequenceसंचालन को शामिल करता है, जहां विशेष रूप से [परावर्तन। ऑबजसेक] / 1 get_sizeमेटा-ऑब्जेक्ट संतोषजनक के लिए तत्वों की संख्या निकालने के लिए विशेषता को शामिल करता है ObjectSequence:
[Reflect.ops.objseq] / 1
template <ObjectSequence T> struct get_size;
सभी विशेषताओं को आधार विशेषता के साथ आवश्यकताओं (20.10.1)
get_size<T>को पूरा करना होगा
, जहां ऑब्जेक्ट अनुक्रम में तत्वों की संख्या है।UnaryTypeTraitintegral_constant<size_t, N>N
इस प्रकार, परावर्तन टीएस को अपने वर्तमान रूप में स्वीकार और कार्यान्वित किया जाना था, एक एनुम के तत्वों की संख्या की गणना, संकलन समय पर, निम्नानुसार की जा सकती है:
enum class Example { A, B, C, D, E };
using ExampleEnumerators = get_enumerators<Example>::type;
static_assert(get_size<ExampleEnumerators>::value == 5U, "");
जहाँ हम अन्य उपनामों को देखने get_enumerators_vऔर get_type_vआगे प्रतिबिंब को सरल बनाने की संभावना रखते हैं :
enum class Example { A, B, C, D, E };
using ExampleEnumerators = get_enumerators_t<Example>;
static_assert(get_size_v<ExampleEnumerators> == 5U, "");
परावर्तन TS पर स्थिति
जैसा कि हर्ब सटर की ट्रिप रिपोर्ट: समर ISO C ++ मानकों की बैठक (रैपरस्विल) 9 जून, 2018 से आईएसओ C ++ कमेटी की समर मीटिंग, रिफ्लेक्शन टीएस को फीचर-पूर्ण घोषित किया गया है
परावर्तन टीएस सुविधा-पूर्ण है : परावर्तन टीएस को फीचर-पूर्ण घोषित किया गया था और इसे गर्मियों में मुख्य टिप्पणी मतपत्र के लिए भेजा जा रहा है। फिर से ध्यान दें कि टीएस का वर्तमान टेम्पलेट मेटाप्रोग्रामिंग-आधारित सिंटैक्स सिर्फ एक प्लेसहोल्डर है; अनुरोध की जा रही प्रतिक्रिया डिजाइन के मूल "हिम्मत" पर है, और समिति पहले से ही यह जानती है कि सतह के सिंटैक्स को एक सरल प्रोग्रामिंग मॉडल के साथ बदलने का इरादा है जो साधारण संकलन-समय कोड और <>नॉट -स्टाइल मेटाप्रोग्रामिंग का उपयोग करता है ।
और शुरू में C ++ 20 के लिए योजना बनाई गई थी, लेकिन यह कुछ हद तक स्पष्ट नहीं है अगर प्रतिबिंब TS के पास अभी भी C ++ 20 रिलीज में बनाने का मौका होगा।