C++ polymorphism and template class -


मेरे पास प्रपत्र का एक वर्ग है:

  टेम्पलेट रेडब्लैकनोड & lt; T & gt;  

कौन से फ़ॉर्म के एक पेड़ में संग्रहीत है:

  टेम्पलेट लाल ब्लैकप्टी & lt; redblacknode & lt; T & gt; & Gt;  

किसी विशेष पेड़ के लिए मैं चाहता हूं कि नोड्स दोनों को समान जानकारी (दो अलग-अलग लंबे) को स्टोर करें, लेकिन विभिन्न मानों पर अनुक्रमित किया जाए।

मैं आरंभ कर रहा हूँ इस तरह से नोड्स:

  पेजरोकॉर्ड addPR = PageRecord (पृष्ठ संख्या, -1); FindNode = नया लाल ब्लैक नोड & lt; PageRecord & gt; (एडीपीआर);  

क्या मैं इस से बहुलोफिक व्यवहार (== और & lt; ऑपरेटरों को ओवरलोड करके) प्राप्त कर सकता हूं, हालांकि मैं नोड में एक पॉइंटर को नहीं लूंगा?

आप स्थिर बहुरूपता का उपयोग कर सकते हैं लेकिन एक सरल तरीका हो सकता है:

  टेम्पलेट & lt; typename T & gt; क्लास रेडब्लैकनोड {सार्वजनिक: रेडब्लैकनोड (टीटी): एम_ टी (टी) {} टी getT () कॉन्स्ट {रिटर्न एम_ टी; } निजी: टी एम_टी; }; टेम्पलेट & lt; typename T & gt; इनलाइन बूल ऑपरेटर & lt; (कॉन्स्ट रेडब्लैकनोड & lt; T & gt; & amp; एलएचएस, कॉन्स्ट रेडब्लैकनोड & lt; T & gt; & amp; amp; rhs) {रिटर्न lhs.getT () & lt; rhs.getT (); }  

में main.cpp:

  रेडब्लैकनोड & lt; int & gt; एक (1); redblacknode & LT; पूर्णांक & gt; ख (2); लाल ब्लैकनोड & lt; int & gt; * c = new redblacknode & lt; int & gt; (3); QDebug () & lt; & lt; (बी एंड एलटी; ए); // प्रिंट गलत qDebug () & lt; & lt; (बी एंड एलटी; * सी); // प्रिंट सही  

के बाद, यदि आप गतिशील बहुरूपता (मूलतः, आभासी फ़ंक्शन + पॉइंटर्स) चाहते हैं, तो यह आपके टेम्पलेट लाल ब्लैकएनोड परिभाषा पर निर्भर करता है (आपको एक सुपर क्लास की आवश्यकता होगी, CRTP देखें) ।

संपादित करें: मैं मानता हूं कि आपका पॉइंटर टाइप लाल है। *

Edit2: मैं अपना कोड प्रदर्शित करने के लिए थोड़ा बदल चुका हूं।


Comments