1.
gun(A<Ts...>::hun(vs)...)
=> gun(A<T1, T2, …, Tn>::hun(vs)...)
=> gun(A<T1, T2, …, Tn>::hun(v1),
A<T1, T2, …, Tn>::hun(v2),
…,
A<T1, T2, …, Tn>::hun(vm))
2.
gun(A<Ts...>::hun(vs...))
=> gun(A<T1, T2, …, Tn>::hun(vs...))
=> gun(A<T1, T2, …, Tn>::hun(v1, v2, …, vm))
यह स्पष्ट होना चाहिए।
3.
gun(A<Ts>::hun(vs)...)
=> gun(A<T1>::hun(v1), A<T2>::hun(v2), …, A<Tn>::hun(vn))
(इस मामले में कार्यक्रम यदि नियम और शर्तें की लंबाई बनाम अलग संकलन नहीं होगा)
...
एक पैटर्न का विस्तार किया जाएगा (जो पैरामीटर पैक शामिल) इसे आगे बढ़ाना, जिसका अर्थ है। ,
foo(Ts, Us, Vs)...
=> foo(T1, U1, V1), foo(T2, U2, V2), …, foo(Tn, Un, Vn)
और अगर वहाँ विस्तार नेस्टेड रहते हैं अंतरतम पैटर्न: foo(Ts, Us, Vs)...
में, सूची Ts
, Us
के प्रत्येक सदस्य, Vs
(लॉक कदम में प्रगणित) उस पैटर्न में subsituted हो जाएगा, और एक अल्पविराम सूची बनाई है पहले विस्तार किया जाएगा। इसलिए, 1 मामले में, पैटर्न Ts
पहले T1, T2, …, Tn
में विस्तारित किया जाएगा। और फिर, पैटर्न बाहरी ...
पूर्ववर्ती A<T1, T2, …, Tn>::fun(vs)
है - ध्यान दें कि Ts
विस्तार किया गया है - तो यह v1
, v2
, आदि प्रतिस्थापन vs
में से A<T1, T2, …, Tn>::fun(v1), <T1, T2, …, Tn>::fun(v2), …, <T1, T2, …, Tn>::fun(vm)
को विस्तार किया जाएगा।
आप शायद यह निर्दिष्ट करना चाहते हैं कि 'टीएस' (उदाहरण के लिए) 'शून्य *, int, char, std :: string' या कुछ है, इसलिए उत्तर थोड़ा बेहतर संरेखित होते हैं। –