क्या मैं प्रकार पैरामीटर को जाने बिना एक share_ptr पकड़ सकता हूं? [डुप्लिकेट]
मैं shared_ptr
एक खाका वर्ग रखना चाहूंगा । हालाँकि, मैं क्लास B को एक टेम्पलेट क्लास के रूप में भी बनाना नहीं चाहता। मेरी समझ में, किसी भी प्रकार के साथ साझा किए गए शेप में समान मेमोरी लेआउट होगा। तो मैं इस परिदृश्य में किसी भी वैकल्पिक हल सोच रहा हूँ?
template<T>
class A {
...
};
class B {
...
std::shared_ptr<A<T>> ptr;
}
जवाब
2 AtnNn
जब प्रकार बिल्कुल भी मायने नहीं रखता है, तो void
इसका उपयोग किया जा सकता है।
template <typename>
class C {};
std::shared_ptr<void> p = std::make_shared<C<int>>();
एक मोनोमोर्फिक बेस क्लास जोड़ना उस प्रकार को प्रतिबंधित करने की अनुमति देता है जिसे संग्रहीत किया जा सकता है।
class AnyC {};
template <typename>
class C : public AnyC {};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
अगर उस बेस क्लास में वर्चुअल तरीके हैं तो उन्हें पॉइंटर के जरिए बुलाया जा सकता है।
class AnyC {
virtual void f();
};
template <typename>
class C : public AnyC {
void f() override;
};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
p->f();