मान लीजिए मैं दो struct
रों है:बिल्कुल सही वस्तु के एक सदस्य अग्रेषण
struct X {};
struct Y { X x; }
मैं कार्यों:
void f(X&);
void f(X&&);
मैं एक समारोह g()
कि Y&
या Y&&
लेकिन सही अग्रेषण X&
लेता है कैसे लिख सकता हूँ या X&&
से f()
क्रमश:
template <typename T>
void g(T&& t) {
if (is_lvalue_reference<T>::value) {
f(t.x);
} else {
f(move(t.x));
}
}
उपरोक्त कोड मेरे इरादे को चित्रित करता है लेकिन पैरामीटर की संख्या बढ़ने के साथ बहुत स्केलेबल नहीं है। क्या यह एक सही तरीका है कि इसे सही अग्रेषण के लिए काम करें और इसे स्केलेबल बनाएं?
मैं 'is_lvalue_reference :: मान'' is_lvalue_reference के लिए बदल रहा लगता है कि :: (टी))> :: value' में आपके द्वारा इच्छित अर्थशास्त्र होगा, लेकिन मुझे लगता है कि आपकी वांछित अर्थशास्त्र संदिग्ध हैं ... –
ildjarn
(बॉट किए गए उत्तर के लिए खेद है।) मैं कहूंगा कि यह स्केल नहीं करता है क्योंकि डिज़ाइन है साथ शुरू करने के लिए संदिग्ध। उपरोक्त "स्थानांतरित" करने का क्या अर्थ है? यह किस राज्य में मुख्य वस्तु को छोड़ देता है? यहां तक कि अगर इसे लिखने का एक आसान तरीका था, तो यह खराब संरचित कोड की तरह दिखता है ... –