C ++ 0x उपयोग करने का एक उदाहरण दिखाता है std::forward
:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
जब यह std::forward
हमेशा उपयोग करने के लिए फायदेमंद है ?
इसके अलावा, यह &&
पैरामीटर घोषणा में उपयोग करने की आवश्यकता है , क्या यह सभी मामलों में मान्य है? मुझे लगा कि आपको एक समारोह में अस्थायी तौर पर पास करना होगा अगर फ़ंक्शन को &&
इसके साथ घोषित किया गया था , तो क्या फू को किसी भी पैरामीटर के साथ बुलाया जा सकता है?
अंत में, अगर मेरे पास फंक्शन कॉल है जैसे:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
क्या मुझे इसके बजाय इसका उपयोग करना चाहिए:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
इसके अलावा, यदि फ़ंक्शन में दो बार पैरामीटर का उपयोग किया जाता है, अर्थात एक ही समय में दो कार्यों को अग्रेषित किया जाता है, तो क्या इसका उपयोग करना बुद्धिमान है std::forward
? std::forward
एक ही चीज़ को दो बार अस्थायी रूप से परिवर्तित नहीं करेंगे , मेमोरी को स्थानांतरित करना और इसे दूसरे उपयोग के लिए अमान्य बना देंगे ? क्या निम्न कोड ठीक होगा:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
मैं थोड़ा उलझन में हूँ std::forward
, और मैं ख़ुशी से कुछ समाशोधन का उपयोग करूँगा।
Args...&& args
?