¿Puedo mantener un shared_ptr sin conocer el parámetro de tipo? [duplicar]
Aug 17 2020
Me gustaría tener una shared_ptr
clase de plantilla. Sin embargo, no quiero que la clase B también sea una clase de plantilla. Según tengo entendido, shared_ptr con cualquier tipo tendrá el mismo diseño de memoria. Entonces, me pregunto alguna solución en este escenario.
template<T>
class A {
...
};
class B {
...
std::shared_ptr<A<T>> ptr;
}
Respuestas
2 AtnNn Aug 17 2020 at 17:19
Cuando el tipo no importa en absoluto, void
se puede usar.
template <typename>
class C {};
std::shared_ptr<void> p = std::make_shared<C<int>>();
Agregar una clase base monomórfica permite restringir el tipo que se puede almacenar.
class AnyC {};
template <typename>
class C : public AnyC {};
std::shared_ptr<AnyC> p = std::make_shared<C<int>>();
Si esa clase base tiene métodos virtuales, se pueden llamar a través del puntero.
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();