पर गैर-कॉन्स्ट क्लास फ़ंक्शन को कॉल करने से कॉन्स्ट क्लास फ़ंक्शन को रोकें, सुंदर अस्पष्ट शीर्षक के लिए क्षमा करें, लेकिन यह सब कुछ कहता है। यह मैं क्या मतलबसंदर्भ सदस्य
class A
{
void DoSomething(); // non-const
}
Class B
{
public:
B(A& a) : _a(a) { }
// const function
void DoSomethingElse() const
{
// Is there a way to disallow this?
_a.DoSomething();
}
void DoEvenMore()
{
// Should be OK
_a.DoSomething();
}
private:
// Can't make it const A& because it needs
// be non-const for non-const functions
A& _a; // A reference
}
तो वहाँ एक तरह से मैं A::DoSomething()
कॉल करने से रोका जा सकता है B::DoSomethingElse()
है?
हालांकि, B::DoEventMore()
जो const
नहीं है, कॉल करने में सक्षम होना चाहिए।
मैं विज़ुअल सी ++ उपयोग कर रहा हूँ 2013
कोड ऊपर मेरी कार्यक्रम में एक बग का प्रदर्शन होगा। (मेरे परिदृश्य में कक्षा ए कॉलिंग कोड की ऑब्जेक्ट/this
पॉइंटर को उतार देगा।) क्योंकि इस तरह की त्रुटियों को रोकने के लिए कॉन्स्ट-कॉन्फ़िगरेशन का बिंदु होगा, मैं बस सोच रहा था कि संकलन समय पर इसकी जांच करने का कोई तरीका है या नहीं।
आवेदन में मैं लिख रहा हूं कि समारोह कॉल करने के लिए खतरनाक प्रतीत नहीं होता है। DoEvenMore()
से इसे कॉल करते समय परिणाम वही होगा, सिवाय इसके कि B
का विनाश तब तक स्थगित हो जाता है जब तक कि कार्य पूरा नहीं हो जाता है।
धन्यवाद, यही वह है जिसे मैं ढूंढ रहा था। इसे अंतर्निहित बनाने का कोई तरीका नहीं है, है ना? (कॉल को छोड़ना।) – Aidiakapi
@ एडियाकापी यदि आपका मतलब है '_a' तक सीधे पहुंचकर, तो नहीं, ऐसा नहीं है। चूंकि '_a' स्वयं 'const' नहीं है, इसलिए आप इसका उपयोग करके गैर-'const' सदस्य फ़ंक्शंस को कॉल करने के लिए स्वतंत्र हैं। – Praetorian
उत्तर के लिए ठीक है धन्यवाद। – Aidiakapi