2017-05-08 28 views
5

संदर्भों की एक स्पष्ट और समझदार सूची है जिसमें cppreference.com पर एक पैक विस्तार हो सकता है। मैं जो करने की कोशिश कर रहा हूं वह मानक से उपयोग करने के लिए आंशिक रूप से अनुभव प्राप्त करने के लिए मानक से समान जानकारी प्राप्त करना है। हालांकि, मैं मानक से cppreference.com पर सूचीबद्ध सभी पैक विस्तार संदर्भों को प्राप्त करने में असमर्थ हूं।संदर्भ जिसमें पैक विस्तार हो सकते हैं

cppreference.com सूचियों, दूसरों के बीच, निम्नलिखित चार संदर्भ: फ़ंक्शन तर्क सूचियां, टेम्पलेट तर्क सूचियां, फ़ंक्शन पैरामीटर सूचियां और टेम्पलेट पैरामीटर सूचियां।

दूसरी ओर, मानक का कहना है (14.5.3.4):

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

  • फ़ंक्शन पैरामीटर पैक (8.3.5) में; पैटर्न इलिप्सिस के बिना पैरामीटर-घोषणा है।
  • टेम्पलेट पैरामीटर पैक एक पैकेट विस्तार (14.1) है कि में:
    • यदि टेम्पलेट पैरामीटर पैक एक पैरामीटर-घोषणा है, पैटर्न इलिप्सिस के बिना पैरामीटर-घोषणा है;
    • यदि टेम्पलेट पैरामीटर पैक टेम्पलेट-पैरामीटर-सूची के साथ एक प्रकार-पैरामीटर है; पैटर्न इलिप्सिस के बिना संबंधित प्रकार-पैरामीटर है।
  • ...
  • एक टेम्पलेट तर्क-सूची (14.3) में; पैटर्न एक टेम्पलेट-तर्क है।
  • ...

मुझे पता करने में असमर्थ हूँ जहां मानक का कहना है कि पैक विस्तार समारोह तर्क सूचियों में हो सकता है। मुझे लगता है कि इस संदर्भ को किसी भी तरह ऊपर उद्धृत तीन बुलेट बिंदुओं में से एक द्वारा कवर किया गया है।

बस के मामले में यह स्पष्ट नहीं है क्या मैं समारोह तर्क सूचियों में पैक विस्तारों में मतलब है, पर विचार निम्न उदाहरण:

template <typename ...Args> void f(Args ...args) {} 
template <typename ...Args> void g(Args ...args) { 
    f(args...); // Pack expansion in a function argument list. 
} 
+0

क्या आपका मतलब है कि कोई फ़ंक्शन कब लगाया जा रहा है? जैसे 'f (some_pack ...)' –

+0

@VittorioRomeo वास्तव में, प्रश्न में उल्लिखित [cppreference.com पृष्ठ] (http://en.cppreference.com/w/cpp/language/parameter_pack) भी देखें। मैं "फ़ंक्शन तर्क सूचियों" शीर्षक के नीचे दिए गए उदाहरणों के बारे में बात कर रहा हूं। – user1494080

+0

यहां संभव पूर्ण स्पष्टीकरण http://en.cppreference.com/w/cpp/language/parameter_pack "विस्तार लोकी" –

उत्तर

5

एक समारोह तर्क सूची वाक्य रचना है एक प्रारंभकर्ता-सूची , इसलिए यह [temp.variadic]/(4.4) द्वारा कवर किया गया:

एक प्रारंभकर्ता-सूची में; पैटर्न प्रारंभकर्ता-खंड है।


1. एक समारोह कॉल के व्याकरण पोस्टफ़िक्स अभिव्यक्ति(अभिव्यक्ति-सूची ऑप्ट) है।और अभिव्यक्ति-सूची केवल प्रारंभकर्ता-सूची है। ([expr.post])

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