Могу ли я удерживать shared_ptr, не зная параметра типа? [дубликат]
Aug 17 2020
Я бы хотел провести shared_ptr
курс по шаблону. Однако я не хочу делать класс B и классом-шаблоном. В моем понимании shared_ptr любого типа будет иметь одинаковую структуру памяти. Итак, мне интересно какое-либо обходное решение в этом сценарии?
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();