Tür parametresini bilmeden bir shared_ptr tutabilir miyim? [çiftleme]

Aug 17 2020

Ben tutmak istiyorum shared_ptrbir şablon sınıfı. Ancak, B sınıfını da şablon sınıf yapmak istemiyorum. Anladığım kadarıyla, herhangi bir türdeki shared_ptr aynı bellek düzenine sahip olacaktır. Yani bu senaryoda herhangi bir geçici çözümü merak ediyorum?

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

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

Yanıtlar

2 AtnNn Aug 17 2020 at 17:19

Tip hiç önemli olmadığında voidkullanılabilir.

template <typename>
class C {};

std::shared_ptr<void> p = std::make_shared<C<int>>();

Monomorfik bir temel sınıf eklemek, saklanabilecek türlerin kısıtlanmasına izin verir.

class AnyC {};

template <typename>
class C : public AnyC {};

std::shared_ptr<AnyC> p = std::make_shared<C<int>>();

Bu temel sınıfın sanal yöntemleri varsa, bunlar işaretçi aracılığıyla çağrılabilir.

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();