मैं निम्नलिखित कोड की तरह कुछ है:कैसे ठीक से variadic टेम्पलेट के साथ संदर्भ का उपयोग करने के लिए
template<typename T1, typename T2, typename T3, typename T4>
void inc(T1& t1, T2& t2, T3& t3, T4& t4) { ++t1; ++t2; ++t3; ++t4; }
template<typename T1, typename T2, typename T3>
void inc(T1& t1, T2& t2, T3& t3) { ++t1; ++t2; ++t3; }
template<typename T1, typename T2>
void inc(T1& t1, T2& t2) { ++t1; ++t2; }
template<typename T1>
void inc(T1& t1) { ++t1; }
मैं आगामी मानक से प्रस्तावित variadic टेम्पलेट का उपयोग कर यह reimplement करना चाहते हैं। हालांकि, मैंने अभी तक जो उदाहरण देखे हैं, वे उदाहरणों की तरह printf प्रतीत होते हैं, यहां अंतर संदर्भों का उपयोग प्रतीत होता है। मैं निम्नलिखित के साथ आ गया है:
inline void inc() { }
template<typename T>
inline void inc(T&& t) { ++t; }
template<typename T,typename ... Args>
inline void inc(T&& t, Args&& ... args) { ++t; inc(args...); }
क्या मुझे पता करना चाहते हैं:
मैं आर-मूल्यों के बजाय संदर्भ का उपयोग करते हुए किया जाना चाहिए?
संभव संकेतों को पूरा करने के तरीके के बारे में संभावित संकेत या संकेत।
रिकर्सिव फ़ंक्शन कॉल के मुद्दे के संबंध में नए प्रस्तावित मानक प्रदान करने की क्या गारंटी है, क्या कोई संकेत है कि उपर्युक्त वैरिएड संस्करण मूल के रूप में इष्टतम होगा? (मैं इनलाइन या कुछ ऐसे जोड़ना चाहिए?)
जिज्ञासा से, मैंने उन कार्यों को gcc4.5 पर फेंक दिया, और रिकर्सन हटा दिया गया और पूरी चीज को रेखांकित किया गया। –
'T &&' एक रैल्यू संदर्भ नहीं है क्योंकि यह एक टेम्पलेट पैरामीटर (इस मामले में 'टी') में सफल होता है। इसलिए यह एक सार्वभौमिक संदर्भ/अग्रेषण संदर्भ है जो सबकुछ से जुड़ा हुआ है। 'Arg &&' के लिए भी यही सच है। [विवरण] देखें (http://en.cppreference.com/w/cpp/language/reference#Forwarding_references)। –