2011-11-01 8 views
6

सी ++ 11 शुरू की variadic templatesवैरिएडिक टेम्पलेट्स के लिए जोड़े गए नए सिंटैक्टिक इकाइयों के नाम क्या हैं?

template <typename... Args> 
void foo(Args... params) { 
    cout << sizeof...(Args) << endl; 
} 

Args और params के नाम क्या हैं? मुझे पता है कि उनमें से एक (कम से कम?) को एक वैरिएडिक टेम्पलेट पैक कहा जाता है लेकिन यह कौन सा है? और दूसरा क्या कहा जाता है?

उत्तर

12

आंशिक रूप से एफ डी आई के हवाले से, §14.5.3:

एक टेम्पलेट पैरामीटर पैक टेम्पलेट पैरामीटर कि शून्य या अधिक टेम्पलेट तर्क को स्वीकार करता है।

एक समारोह पैरामीटर पैक एक समारोह पैरामीटर कि शून्य या अधिक समारोह तर्क को स्वीकार करता है।

एक पैरामीटर पैक या तो टेम्पलेट पैरामीटर पैक या एक समारोह पैरामीटर पैक है।

एक पैक विस्तार एक पैटर्न और एक अंडाकार, इन्स्टेन्शियशन जो की एक सूची में पैटर्न के शून्य या अधिक instantiations पैदा करता है के होते हैं।

अपने उदाहरण में

तो,

  • typename... Args एक टेम्पलेट पैरामीटर पैक है (और फलस्वरूप भी एक पैरामीटर पैक)
  • Args... params एक समारोह पैरामीटर पैक है (और फलस्वरूप भी पैरामीटर पैक)
  • sizeof...(Args) एक पैक विस्तार है जिसमें Argsपैटर्न (इस संदर्भ में एक पहचानकर्ता) है।
+1

और साथ ही, 'टाइपनाम ... Args' एक * टेम्पलेट पैरामीटर पैक * है, लेकिन यह * पैक विस्तार * नहीं है। 'टेम्पलेट <टाइपनाम में ... Args> कक्षा ए {टेम्पलेट कक्षा सी {}; टेम्पलेट <टेम्पलेट कक्षा ... ई> कक्षा एफ {}; }; ',' बी' एक * टेम्पलेट पैरामीटर पैक * है। 'Args ... B' इसकी घोषणा है जो पैटर्न * Args B' का एक * पैक विस्तार * है, जो * टेम्पलेट-पैरामीटर-सूची * में विस्तार कर रहा है। 'टेम्पलेट वर्ग ... ई' पैटर्न 'टेम्पलेट कक्षा ई' का एक पैक विस्तार भी है। –

+1

@ JohannesSchaub-litb क्या आप इस टिप्पणी को उत्तर के रूप में पोस्ट कर सकते हैं? यह निश्चित रूप से पर्याप्त विस्तृत है। – Motti

+0

क्या आप अपना चौथा बिंदु i.e पैटर्न चीज समझा सकते हैं, मेरा मतलब है कि यह पैटर्न चीज़ कैसे काम करती है? और सी ++ के किस हिस्से में यह काम करता है :) –

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