क्या मैं प्रकार पैरामीटर को जाने बिना एक share_ptr पकड़ सकता हूं? [डुप्लिकेट]

Aug 17 2020

मैं shared_ptrएक खाका वर्ग रखना चाहूंगा । हालाँकि, मैं क्लास B को एक टेम्पलेट क्लास के रूप में भी बनाना नहीं चाहता। मेरी समझ में, किसी भी प्रकार के साथ साझा किए गए शेप में समान मेमोरी लेआउट होगा। तो मैं इस परिदृश्य में किसी भी वैकल्पिक हल सोच रहा हूँ?

template<T>
class A {
...
};

class B {
...
  std::shared_ptr<A<T>> ptr;
}

जवाब

2 AtnNn Aug 17 2020 at 17:19

जब प्रकार बिल्कुल भी मायने नहीं रखता है, तो 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();