2013-05-05 12 views
13

मैं इस पहले की तरह कोड को देखा। मैं जानना चाहता था कि अंतिम कोण ब्रैकेट और पहले के अंत में पैरामीटर पैक डालने के बीच क्या अंतर है। उदाहरण के लिए:क्या वेक्टर <vector<T...>> और वेक्टर <vector<T> कर के बीच अंतर है ...>

using B = std::vector<std::vector<T...>>; 

इनमें से दोनों दो संकलित ठीक हैं लेकिन मुझे नहीं पता कि अंतर क्या है।

क्या कोई समझा सकता है? धन्यवाद।

उत्तर

23

एक पैकेट विस्तार पैटर्न है कि ... के पहले आता है पैक के प्रत्येक तत्व के लिए बार-बार किया जाता है, तो vector<T>... साधन vector<T1>, vector<T2>, vector<T3>vector<T...> जबकि साधन में विस्तार vector<T1, T2, T3>

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

std::vector<std::vector<T1>, std::vector<T2>> 

और

std::vector<std::vector<T1, T2>> 

समान नहीं हैं। पहला संकलन नहीं करेगा, std::vector के लिए दूसरा टेम्पलेट पैरामीटर एक वेक्टर नहीं, आवंटक प्रकार होना चाहिए। यदि दूसरा T2 एक आवंटक प्रकार है तो दूसरा संकलित होगा।

8

जब A<T1, T2, T3> instantiating, यह करने के लिए विस्तारित किया गया है:

std::vector<std::vector<T1>, std::vector<T2>, std::vector<T3>> 

B का दृष्टांत के लिए एक ही टेम्पलेट तर्क का उपयोग करना, आप पाते हैं:

std::vector<std::vector<T1, T2, T3>> 
+2

और न – Praetorian

+3

संकलन @Praetorian तुम सही हो जाएगा। हालांकि, मेरा मानना ​​है कि ओपी पैरामीटर पैक का विस्तार कैसे किया जाता है इस बारे में अधिक रुचि रखते हैं। – mfontanini

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