तरीके में एल मूल्य इन्स्टेन्शियशन बता सकते हैं कि वे एक एल मूल्य या एक आर-मूल्य पर कहा जाता है:रोकथाम सी ++ 14 में सी ++ 14
struct A{
A() { puts("Ctor"); }
void m() const & { puts("L-value"); }
void m() const && { puts("R-value"); }
};
int main(){
A a; //Ctor
a.m() //L-value
A().m(); //Ctor; R-value
}
एक ctor बता सकते हैं जो प्रकार यह निर्माण कर रहा है? क्या मैं अपनी कक्षा से एल-वैल्यू के निर्माण को पूरी तरह अक्षम कर सकता हूं?
मेरे पास प्रॉक्सी क्लास (कई, वास्तव में) है, जो हमेशा किसी और चीज में परिवर्तित होना चाहिए। कनवर्ट किए बिना इसका उपयोग करना एक त्रुटि है। मैं रनटाइम पर उस त्रुटि का पता लगा सकता हूं, उदाहरण के लिए, bool used_ = 0;
सदस्य #ifndef NDEBUG;
सदस्य और इसे मेरे उपयोगकर्ता द्वारा निर्दिष्ट कलाकार में सेट करके, और फिर प्रॉक्सी क्लास के Dtor
में assert(used_)
कर कर, हालांकि यह बहुत अच्छा होगा अगर मैं संकलक को रोकने के लिए संकलक प्राप्त कर सकता हूं पहली जगह में है कि प्रॉक्सी के L-value
उदाहरणों में से instatiation:
auto x = Proxy().method1().method2(); // no
Proxy p; // no
Target x = Proxy(); //yes
Target x = Proxy().method1().method2(); //yes
मुझे लगता है कि सी ++ 14 के साथ की तरह कुछ कर सकता हूँ?
जो भी आप चाहते हैं उसे हासिल करने के लिए पुराने स्कूल का तरीका निजी रूप से कन्स्ट्रक्टर को सेट करना है और केवल स्थिर तरीकों के माध्यम से निर्माण की अनुमति देना है। मुझे लगता है कि आपके कोड के साथ काम करने वाले व्यक्ति के लिए भी अधिक सहज होगा। – ypnos
'ऑटो और एक्स = प्रॉक्सी(); 'आईआईआरसी को रोका नहीं जा सकता है। और फिर 'x' एक संशोधित lvalue प्रॉक्सी है। – dyp
मुझे लगता है कि उत्तर अभी भी नहीं है और आपको ऐसा करना है जो ypnos – NathanOliver