वैरिएडिक टेम्प्लेट में "..." टोकन के लिए सिंटेक्स नियम
सी में, वेरिएडिक टेम्प्लेट उन टेम्प्लेट के निर्माण को सक्षम करते हैं जो स्वीकार करते हैं तर्कों की परिवर्तनशील संख्या. "..." टोकन इस संदर्भ में एक महत्वपूर्ण भूमिका निभाता है, या तो तर्क पैक या पैरामीटर अनपैकर के रूप में कार्य करता है।
एलिप्सिस प्लेसमेंट के लिए सिंटेक्स नियम
"..." टोकन का स्थान इसके कार्य को निर्धारित करता है:
उदाहरण: "..." के साथ वैरिएडिक टेम्पलेट
निम्नलिखित वैरिएडिक टेम्पलेट पर विचार करें:
template
unique_ptr make_unique( Args&&... args )
{
return unique_ptr(new T(std::forward(args)...));
}
इस उदाहरण में, "..." एक तर्क पैक के रूप में कार्य करता है, जबकि फ़ंक्शन कार्यान्वयन में "..." तर्कों को तर्क चर में अनपैक करता है।
भिन्न एलिप्सिस प्लेसमेंट का कारण
टेम्पलेट तर्क सूची और पैरामीटर सूची के बीच एलिप्सिस प्लेसमेंट में अंतर तर्क पैकिंग और पैरामीटर अनपैकिंग के बीच अंतर के कारण है। टेम्प्लेट तर्क सूची में, "..." इंगित करता है कि पैरामीटर को एकल पैरामीटर पैक में पैक किया जाना चाहिए, जबकि पैरामीटर सूची में, "..." इंगित करता है कि तर्क को अलग-अलग पैरामीटर में अनपैक किया जाना चाहिए।
अनपैकिंग पैटर्न
जब "..." अनपैकर के रूप में अभिव्यक्ति के दाईं ओर दिखाई देता है, तो यह एक विशिष्ट पैटर्न का पालन करता है:
उन्नत उपयोग: Arrays को आरंभ करना
Elipsis का उपयोग arrays को आरंभ करने के लिए भी किया जा सकता है:
struct data_info
{
boost::any data;
std::size_t type_size;
};
std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}
यह वेक्टर v को उन मानों के साथ आरंभ करता है जहां प्रत्येक तत्व एक संरचना है जिसमें एक args और एक sizeof(T) जोड़ी होती है।
निष्कर्ष में , विविध टेम्प्लेट के संदर्भ में "..." टोकन प्लेसमेंट और अनपैकिंग पैटर्न के लिए विशिष्ट सिंटैक्स नियमों का पालन करते हुए एक तर्क पैक और पैरामीटर अनपैकर दोनों के रूप में कार्य करता है। इसका लचीला उपयोग शक्तिशाली टेम्पलेट निर्माण और अनुकूलन की अनुमति देता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3