नीचे कोड कैसे काम करता है/केवल डिफ़ॉल्ट कंपाइलर जेनरेटर कन्स्ट्रक्टर? मैं इसे पीओडी के लिए उम्मीद करता हूं लेकिन नीचे की संरचना शायद पीओडी नहीं है, इसलिए यह कुछ और होना चाहिए। एक जेसन के टर्नर सी ++ साप्ताहिक 49/50 ईपी जहां वह std::forward<T>(t)...
वैराडिक क्लास टेम्पलेट और विरासत - डिफॉल्ट कंपाइलर जेनरेटर कन्स्ट्रक्टर
उत्तर
खेलने में कोई कंस्ट्रक्टर्स यहाँ हैं के साथ एक variadic निर्माता परिभाषित करने के लिए अनुवर्ती
template <typename ... T>
struct C : T ... {
using T::operator()...;
};
// template class guidance feature of C++17
template <typename ... T>
C(T...) -> C<T...>;
int main(){
C c { []{}, [](int){} };
c(3);
}
इस सवाल के रूप में आता है। यह कोड C++ 17:
- कन्स्ट्रक्टर के लिए टेम्पलेट पैरामीटर कटौती (P0091) में तीन विशेषताओं के संगम के कारण काम करता है।
- कुल प्रारंभिक विस्तार (P0017)
- उपयोग-घोषणाओं का आधुनिकीकरण (P0195)।
क्या इस पंक्ति में होता है:
C c { []{}, [](int){} };
कि पहले, हम टेम्पलेट पैरामीटर कटौती (1) निकालना कि c
प्रकार C<__lambda1, __lambda2>
की वास्तव में है का उपयोग करें। यह आपके कटौती मार्गदर्शिका के उपयोग के माध्यम से किया जाता है।
इसके बाद, C<__lambda1, __lambda2>
के बाद से एक समग्र ((2) के आधार वर्ग प्रतिबंध में छूट की वजह से - आप सही है कि सी ++ 11/14 में एक समग्र विचार नहीं किया है कर रहे हैं) है, हम उपयोग कर सकते हैं कुल-आरंभीकरण इसे शुरू करने के लिए। हम एक कन्स्ट्रक्टर का उपयोग करते हैं। आधारभूत कक्षाओं के साथ अब समग्र प्रारंभिक तरीके से काम करने का तरीका यह है कि हमें बस बाएं से दाएं बेस को प्रारंभ करना होगा। तो पहली अभिव्यक्ति ([]{}
) का उपयोग पहली बेस क्लास (__lambda1
) को शुरू करने के लिए किया जाता है और दूसरी अभिव्यक्ति ([](int){}
) का उपयोग दूसरी बेस क्लास (__lambda2
) को आरंभ करने के लिए किया जाता है।
अन्त में, कॉल c(3)
काम करता है क्योंकि (3) की अनुमति दी तो आप बस
using T::operator()...;
जो C
के दायरे में, जहां अधिभार संकल्प अपेक्षा के अनुरूप काम कर सकते हैं में दोनों lambdas 'कॉल ऑपरेटरों में लाता है लिखने के लिए। नतीजा यह है कि हम __lambda2
के कॉल ऑपरेटर को कॉल करते हैं, जो कुछ भी नहीं करता है।
धन्यवाद। अगर मेरे पास सी में कोई सदस्य होगा, तो मैं int कहूंगा; यह पूरी बात टूट जाएगी, है ना? बी को शुरू करने का कोई तरीका नहीं है ... और सी के int i; सदस्य। क्या मेरी समझ सही है? – Kobi
मुझे लगता है कि यह होगा, उदाहरण के लिए, 'सी सी {[] {}, [] (int) {}, 1}; '। प्रारंभिक में आधार के बाद आप कुल सदस्यों को प्रारंभ करते हैं। [P0017r1] में "स्कोप" देखें (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0017r1.html) – TBBle
- 1. वैराडिक टेम्पलेट समलिंग क्लास
- 2. सी ++ वैराडिक टेम्पलेट क्लास समाप्ति
- 3. वैराडिक टेम्पलेट क्लास तर्क कंटेनर इंस्टेंटेशन
- 4. कॉपी कन्स्ट्रक्टर और डिफॉल्ट कन्स्ट्रक्टर
- 5. टेम्पलेट क्लास कॉपी कन्स्ट्रक्टर
- 6. वैराडिक टेम्पलेट
- 7. सी ++ टेम्पलेट कॉपी कन्स्ट्रक्टर टेम्पलेट क्लास
- 8. कन्स्ट्रक्टर पैरामीटर्स और विरासत
- 9. डिफॉल्ट मैप कन्स्ट्रक्टर
- 10. वैराडिक टेम्पलेट निष्कर्ष
- 11. क्लास से डिफॉल्ट कन्स्ट्रक्टर के बिना कक्षा से विरासत में मिली
- 12. जावा में डिफ़ॉल्ट कन्स्ट्रक्टर और विरासत
- 13. कन्स्ट्रक्टर और विरासत
- 14. डेल्फी कन्स्ट्रक्टर और क्लास कन्स्ट्रक्टर
- 15. लंबोक @ बुल्डर और जेपीए डिफॉल्ट कन्स्ट्रक्टर
- 16. सी ++ 17 वैराडिक टेम्पलेट फोल्डिंग
- 17. सी ++ में, केवल डिफॉल्ट कन्स्ट्रक्टर के साथ एक डिफॉल्ट कन्स्ट्रक्टर वाला कन्स्ट्रक्टर है?
- 18. कन्स्ट्रक्टर विरासत और प्रत्यक्ष सदस्य प्रारंभिकरण
- 19. जावास्क्रिप्ट विरासत और कन्स्ट्रक्टर संपत्ति
- 20. जावा कॉपी कन्स्ट्रक्टर और विरासत
- 21. वैराडिक टेम्पलेट्स
- 22. क्या डिफॉल्ट डिफॉल्ट कन्स्ट्रक्टर शून्य को वैरिएबल प्रारंभ करता है?
- 23. वर्चुअल विरासत में कन्स्ट्रक्टर ऑर्डर
- 24. `यह` और एक क्लास कन्स्ट्रक्टर
- 25. स्टेटिक कन्स्ट्रक्टर और सिंगलटन क्लास
- 26. एक विशिष्ट प्रकार के वैराडिक टेम्पलेट पैरामीटर
- 27. सी ++ टेम्पलेट वर्ग और विरासत
- 28. Django-compressor और टेम्पलेट विरासत
- 29. django टेम्पलेट विरासत और संदर्भ
- 30. "टेम्पलेट क्लास
"पीओडी" वास्तव में सी ++ में कोई चीज़ नहीं है। –
'सी' एक सी ++ 17 कुल है। –
धन्यवाद! मैं इस नए सी ++ 17 से अनजान था। – Kobi