शीर्षक में शून्य * लेखन सिर्फ इसलिए कि नक्शे के उन वास्तविक प्रकार के बारे में पता नहीं करना चाहिए नहीं एक अच्छा विचार है, तो आप अपने कोड में हर जगह प्रकार सुरक्षा खोना जैसे स्थानों जो ClassA के बारे में पता कर में शामिल है, ।
पर विचार करें
- एक वर्ग जो अपने कोड के हर हिस्से के बारे में पता कर सकते हैं से ClassA पाने,
- एक वस्तु जो कोड के उन हिस्सों है से निपटने के लिए करने के लिए एक इंटरफेस प्रदान में नक्शा लपेटकर नक्शा है, लेकिन ClassA के साथ नहीं,
- की घोषणा है, लेकिन अपने हेडर फाइल में कक्षा ClassA को परिभाषित नहीं (खतरनाक वस्तुओं कुछ जगह है जहाँ ClassA घोषित किया जाता है पर नष्ट कर रहे हैं, लेकिन परिभाषित नहीं करता है, तो हो सकता है),
टेम्पलेट का उपयोग कर,
-
- कक्षा को लागू करने वाले मानचित्र को व्युत्पन्न उपclass के रूप में लागू किया गया है, जैसे नक्शा फ़ील्ड व्युत्पन्न उपclass में रखा जा सकता है।
प्वाइंट 5: चित्रण (= टेम्पलेट पैटर्न)
class Containing {
private:
map<int,void*> myMap;
public:
void somePublicFunction() { // ...implementation }
};
के बजाय आप
// Containing.h
class Containing {
protected:
virtual void doSomething() = 0;
public:
static Containing* Create();
void somePublicFunction() { doSomething(); }
virtual ~Containing() { }
};
// Containing.cc
#include ContainingImplementation.h
Containing* Containing::Create() { return new ContainingImplementation; }
// ContainingImplementation.h/cc
class ContainingImplementation : public Containing {
protected:
virtual void doSomething() { // ... }
private:
map<int,ClassA*> myMap;
public:
virtual ~ContainingImplementation() { }
};
आप ऐसा क्यों करेंगे? कृपया अधिक संदर्भ प्रदान करें क्योंकि अधिक उपयुक्त समाधान होने की संभावना है। – Johnsyweb
आप पहले स्थान पर मानचित्र का उपयोग क्यों नहीं करते? –
BatchyX
@ बैचएक्स मैं अनुमान लगा रहा हूं कि 'होल्ड' में केवल कक्षा ए * नहीं है? –