यहां कुछ ऐसा है जो मैं अक्सर करता हूं, यह सुंदर नहीं है, लेकिन यह सरल और उपयोगी है।
मैं अक्सर टेम्पलेट कंटेनर है कि एक इंटरफ़ेस को लागू के साथ काम करते हैं,
template<class T>
class MyVector : public ContainerInterface
...
कहाँ ContainerInterface बुनियादी उपयोगी सामग्री है की तरह कुछ कल्पना है, लेकिन इतना ही है। अगर मैं अपने टेम्पलेट कार्यान्वयन को उजागर किए बिना पूर्णांक के वैक्टरों पर एक विशिष्ट एल्गोरिदम चाहता हूं, तो कार्यान्वयन में इंटरफ़ेस ऑब्जेक्ट्स और डायनामिक_कास्ट को इसे MyVector पर स्वीकार करना उपयोगी होता है। उदाहरण:
// function prototype (public API, in the header file)
void ProcessVector(ContainerInterface& vecIfce);
// function implementation (private, in the .cpp file)
void ProcessVector(ContainerInterface& vecIfce)
{
MyVector<int>& vecInt = dynamic_cast<MyVector<int> >(vecIfce);
// the cast throws bad_cast in case of error but you could use a
// more complex method to choose which low-level implementation
// to use, basically rolling by hand your own polymorphism.
// Process a vector of integers
...
}
मैं ContainerInterface कि polymorphically का समाधान किया जाएगा करने के लिए एक प्रक्रिया() विधि जोड़ सकता है, यह एक अच्छा OOP तरीका होगा, लेकिन मैं कभी कभी यह इस तरह से करने के लिए पसंद करते हैं। जब आपके पास साधारण कंटेनर होते हैं, तो बहुत सारे एल्गोरिदम और आप अपना कार्यान्वयन छुपा रखना चाहते हैं, गतिशील_कास्ट एक आसान और बदसूरत समाधान प्रदान करता है।
आप डबल-प्रेषण तकनीकों को भी देख सकते हैं।
HTH
इस प्रश्न का शीर्षक वर्णन से बिल्कुल मेल नहीं खाता है। – bradtgmurray