operator->()
की विचित्र भेद परोक्ष लागू किया जा रहा बार-बार जबकि वापसी प्रकार यह अनुमति देता है।
struct X {
int foo;
};
struct Y {
X x;
X* operator->() { return &x; }
};
struct Z {
Y y;
Y& operator->() { return y; }
};
Z z;
z->foo = 42; // Works! Calls both!
मैं, एक अवसर को याद है जब इस व्यवहार एक स्मार्ट सूचक की तरह संदर्भ में किसी अन्य वस्तु के लिए एक प्रॉक्सी के रूप में व्यवहार करने के लिए एक वस्तु सक्षम करना ज़रूरी था कि मैं कर सकते हैं: इस दिखाने के लिए स्पष्ट रास्ता कोड के साथ है विवरण याद नहीं है। मुझे याद है कि मैं इस काम को केवल अजीब विशेष मामले का उपयोग करके a->b
सिंटैक्स का उपयोग करने के इरादे से व्यवहार करने के लिए व्यवहार कर सकता हूं; मुझे समान रूप से काम करने के लिए (*a).b
प्राप्त करने का कोई तरीका नहीं मिला।
यह सुनिश्चित नहीं है कि यह आपके प्रश्न का उत्तर दे; वास्तव में मैं कह रहा हूं, "अच्छा सवाल है, लेकिन यह उससे भी कमजोर है!"
स्रोत
2010-05-30 12:35:32
यह इस तथ्य से स्वाभाविक रूप से पालन करता है कि 'x-> y' को' (x.operator ->()) -> y' के रूप में व्याख्या किया गया है कि यह रिकर्सन है। शायद उन्होंने सोचा कि यह रिकर्सन की अनुमति देने के लिए नुकसान नहीं पहुंचाएगा और इस प्रकार इसे मना नहीं किया? कम से कम मुझे एआरएम में कुछ स्पष्टीकरण नहीं मिला। –