2016-12-01 12 views
8

के साथ काम कर सकते हैं I http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0144r0.pdf पर संरचित बाइंडिंग पर पेपर के माध्यम से स्किम किया गया लेकिन मुझे यह समझने में सक्षम नहीं था कि सिंटैक्स किस प्रकार के structs को बाध्यकारी करने की अनुमति देता है। मेरा सबसे अच्छा अनुमान यह है कि संरचना को कुल प्रकार का होना चाहिए। या केवल सार्वजनिक डेटा सदस्यों के साथ कुछ।किस प्रकार के structs संरचित बाइंडिंग

क्या कोई चेतावनी है जिसमें मुझे याद आ रही है?

+0

जोड़े और टुपल्स अच्छे उदाहरणों की तरह लगते हैं, और नोड प्रकारों को मानचित्र बनाते हैं। –

+0

@KerrekSB :) हाँ, मैं समझता हूं, मैं सिर्फ किस प्रकार के structs से बांध सकता हूं, इसके बारे में कुछ और समझने के लिए देख रहा था, उदाहरण के लिए मेरे पास अपनी खुद की संरचना है। – Curious

+0

निश्चित रूप से। यदि आप सार्वजनिक सदस्यों पर भरोसा नहीं करना चाहते हैं, तो आप उदाहरण के लिए अपने प्रकार के लिए 'std :: get' और' std :: tuple_size' विशेषज्ञ कर सकते हैं। –

उत्तर

5

आप std::tuple_size, std::tuple_element और अपने प्रकार के लिए get विशेषज्ञ नहीं करना चाहते हैं, तो [dcl.decomp] की आवश्यकता है:

अन्यथा, E की गैर स्थिर डेटा सदस्यों के सभी सार्वजनिक किया जाएगा E की या E का एक ही स्पष्ट सार्वजनिक आधार वर्ग के प्रत्यक्ष सदस्यों, E एक गुमनाम संघ सदस्य नहीं करेगा, और पहचानकर्ता-सूची में तत्वों की संख्या E की गैर स्थिर डेटा सदस्यों की संख्या के बराबर होगी ।

इसलिए अनिवार्य रूप से सभी डेटा सदस्यों को एक ही कक्षा में घोषित करने की आवश्यकता है, और उन्हें सभी को सार्वजनिक होने की आवश्यकता है, और आपको सदस्यों की संख्या के समान संख्या प्रदान करने की आवश्यकता है।

+0

शायद यह जीसीसी/क्लैंग बग/उचित कार्यान्वयन की कमी है, लेकिन दोनों कंपाइलर को संरचना से प्रतिलिपि बनाने की आवश्यकता है - मेरा मतलब प्रतिलिपि बनाने वाला है। क्या आप इस पर टिप्पणी कर सकते हैं? यदि आप सोचते हैं कि यह क्यू/ए डॉक्यूमेंट किया गया है तो मैं इसे एक प्रश्न के रूप में पूछ सकता हूं? – PiotrNycz

+0

@PiotrNycz: मेरा सुझाव है कि आप सी ++ 17 प्रकाशित होने तक प्रतीक्षा करें; तो यह एक उत्कृष्ट सवाल होगा। –

संबंधित मुद्दे