मैं किसी वर्ग को बाल-संबंधों में किसी अन्य वर्ग से जुड़ा हुआ वर्ग बनाना चाहता हूं। इसके लिए "बच्चे" वर्ग को इसके माता-पिता के संदर्भ की आवश्यकता है।सी ++ में, निर्माण के दौरान 'इस' सूचक के साथ एक वर्ग सदस्य प्रारंभ करें
उदाहरण के लिए:
template <typename T>
class TEvent {
private: T* Owner;
public: TEvent(T* parent) : Owner(parent) {}
};
class Foo {
private: TEvent<Foo> Froozle; // see below
};
अब समस्या यह है कि मैं Froozle
उदाहरण सीधे प्रारंभ नहीं कर सकते, और न ही फू के निर्माता की instanciation सूची का उपयोग कर, क्योंकि this
संदर्भ वहाँ की अनुमति नहीं है है। एक और विधि setParent(T*)
जोड़ने के अलावा (जो मुझे बहुत पसंद नहीं है क्योंकि इसका मतलब है कि मुझे TEvent<>
उदाहरण को अमान्य स्थिति में छोड़ना है), क्या यह हासिल करने का कोई तरीका है?
वह क्या कहते हैं। जब तक आप जिन वस्तुओं को 'इस' से गुजरते हैं, उन्हें "निर्माण" के दौरान अपने निर्माण के दौरान स्पर्श नहीं किया जाता है (क्योंकि ऑब्जेक्ट 'यह' उस संदर्भ में पूरी तरह से निर्मित नहीं होता है), ऐसा करने से कुछ ठीक है, भले ही कुछ कंपाइलर (विशेष रूप से वीसी) इसके लिए एक चेतावनी उत्सर्जित करें। – sbi
वीसी ++ यहां महत्वपूर्ण बिंदु है। यह वास्तव में काम करता है। ऐसा लगता है कि मुझे जबरन "त्रुटि" दबाना है। आपका बहुत बहुत धन्यवाद! – sunside
मेरी इच्छा है कि वीसी ++ केवल चेतावनी उत्सर्जित करे जब सीटीआर के अंदर "इस" के सदस्य का उपयोग किया जाए। बीटीडब्लू, गूगल :: लॉग-मैसेज क्लास [google-glog] (http://code.google.com/p/google-glog) डीबग उद्देश्य के लिए सीटीआर की मेम-स्टार्टिस्ट सूची में खुद को "यह" स्टोर करता है। मुझे वीसी -2010 में काम करने के लिए #pragma चेतावनी (4355: अक्षम) के साथ पुन: संकलित करना पड़ा। –