如何解决我可以在不知道type参数的情况下持有shared_ptr吗?
我想持有shared_ptr
个模板类。但是,我也不想将B类作为模板类。以我的理解,任何类型的shared_ptr都将具有相同的内存布局。所以我想知道在这种情况下有什么解决方法吗?
template<T>
class A {
...
};
class B {
...
std::shared_ptr<A<T>> ptr;
}
解决方法
当类型完全无关紧要时,可以使用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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。