std::shared_ptr是如何多态的
How is std::shared_ptr polymorphic?
我正在开发一些容器类,它有类似的想法:将指针放在里面。
#include <iostream>
template<class T>
class Container
{
public:
Container ( )
{
pointer = new T ( );
}
~Container ( )
{
delete pointer;
}
T* operator->( )
{
return pointer;
}
private:
T* pointer;
};
struct Base
{
virtual void who ( )
{
std::cout << "Base" << std::endl;
}
};
struct Child : public Base
{
virtual void who ( ) override
{
std::cout << "Child" << std::endl;
}
};
void testContainer ( Container<Base> c )
{
c->who ( );
}
void testSharedPtr ( std::shared_ptr<Base> s )
{
s->who ( );
}
int main ( )
{
Container<Child> child;
std::shared_ptr<Child> sharedChild;
testSharedPtr ( sharedChild );
testContainer ( child );
}
此代码编译失败:error C2664: 'void test(Container<Base> &)' : cannot convert argument 1 from 'Container<Child>' to 'Container<Base> &'
然而,使用std::shared_ptr<Base>
而不是Container
,一切都可以正常工作。所以问题是:
类似于std::shared_ptr
的多形体瘤是可实现的吗?或者这个特性是用C++硬编码的?抱歉我的原始语言。
实现以下构造函数:
template<class Other,
class = typename std::enable_if<std::is_convertible<Other*, T*>::value>::type>
Container(const Container<Other>& _Other)
{
pointer = _Other.pointer;
}
只有当Other*
可转换为T*
时,才会启用此构造函数,如果T
是Other
的基类,则情况显然如此。
相关文章:
- 多态性和功能结合
- 具有默认模板参数的多态类的模板推导失败
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 多态二进制函数
- 访问存储在向量C++中的结构的多态成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 将 std::allocate_shared 与多态资源分配器一起使用
- 通过switch和static_cast访问多态对象的运行时类型
- C++boost序列化多态性问题
- 多源 BFS 多线程
- 如何使用多核代替多核进行编程
- DirectX 窗口通过多窗口和多线程快速闪烁
- 在OCAML中,抽象的价格有多大(即多态性功能)
- 在 std::future 上多次从多个线程调用 wait() 是否安全
- 多次调用多个pthread;比串行代码慢
- C++如何检查文件是否在使用-多线程多进程系统
- c++中的客户端服务器多对多设计模型(多用户-多应用)
- 跨平台多处理和多线程库
- 在boost中定义多精度pi:多精度
- Qt移动版android有多快或多慢?