मेरे पास कक्षा Base
है और कक्षा Derived_1
, Derived_2
... मुझे आईडी प्राप्त करने के लिए व्युत्पन्न कक्षाओं की आवश्यकता है। उन आईडी का उपयोग आगे लुकअप आदि के लिए किया जाता है, और इस प्रकार लगातार होने की आवश्यकता होती है (केवल कुछ यादृच्छिक संख्या नहीं)। चूंकि व्युत्पन्न कक्षाएं उपयोगकर्ता द्वारा बनाई गई हैं, आईडी Derived_N
का सदस्य नहीं हो सकती है। तो मैं DerivedType
कक्षा के साथ आया था।मानचित्र में कुंजी के रूप में डेटा प्रकार (वर्ग प्रकार) का उपयोग करें
class DerivedType
{
static unsigned id;
unsigned m_id;
public:
DerivedType() : m_id(id++) { }
}
अब मैं Derived_N
और DerivedType
के बीच एक मैपिंग बनाना चाहते हैं। जब भी Derived_N
बनाई गई है, इस मानचित्रण अगर विशेष Derived_N
के लिए DerivedType
पहले से ही मौजूद लग रहा है और यह देता है, अन्यथा मानचित्र में नए और दुकानों पैदा करते हैं।
वास्तविक प्रश्न: वहाँ किसी भी तरह से के रूप में नक्शे में कुंजीडेटा प्रकार साथ std::map
उपयोग करने के लिए है? मैं किसी भी टेम्पलेट-मेटाप्रोग्राम समाधान से डरता नहीं हूं। या क्या मेरा लक्ष्य हासिल करने का शानदार तरीका है?
संपादित दिनांक प्रकार -> डेटा प्रकार, मेरा मतलब है ClassType की तरह, मैं माफी चाहता हूँ :)
मैं इसे का उपयोग करना चाहते हैं:
Derived_5 d;
DerivedType dt = getType(d); //Derived_5 is looked up in map, returning particular DerivedType
dt.getId();
Derived_N
के प्रत्येक उदाहरण (एक ही साथ ' एन ') DerivedType throu एक ही आईडी होना चाहिए
EDIT2 - मेरा जवाब मैं मेरी समस्या के लिए बेहतर समाधान पाया ... यह ली है ke इस:
atomic_counter s_nextEventClassID;
typedef int cid_t;
template<class EventClass>
class EventClassID
{
public:
static cid_t getID()
{
static cid_t classID = EventClassID::next();
return classID;
}
static cid_t next() { return ++s_nextEventClassID; }
};
के बाद से मेरे सवाल का कैसे एक नक्शे में डेटाप्रकार उपयोग करने के लिए था, मैं तुम्हारा जवाब में से कुछ का प्रतीक होगा, धन्यवाद
यह स्वीकार जवाब – jupp0r
बहुत अच्छा जवाब है जो आधुनिक सी का उपयोग किया जाना चाहिए ++ – Anonymous