从模板化的派生类强制转换为模板基类
cast from templated derived class to template base class
我正在实现一个shared_pointer模板,它包含一个指向typename T的指针我想实现一个复制构造函数(带有基类(T)的指针),它接收一个共享指针类(包含指向派生类(O)的指针)。我怎么能从基础类型转换到shared_ptr接收指针?
template <typename T>
class Shared_Ptr
{
public:
template <typename O>friend class Shared_Ptr;
template <typename O>
Shared_Ptr(const Shared_Ptr<O>& other_);
private:
struct PtrVal
{
PtrVal(T* ptr);
~PtrVal();
T *m_ptr;
size_t m_count;
};
PtrVal *m_val;
};
如何实现复制构造函数??
template <typename T>
template <typename O>
Shared_Ptr<T>::Shared_Ptr(const Shared_Ptr<O>& other_):
m_val(static_cast<const Shared_Ptr<T> >(other_).m_val)
{}
编译,但在运行时给出分段错误(核心转储)。
我找到了另一个解决方案,但它真的很丑:我将m_ptr (other_)转换为T*(而不是O*),然后将m_val (O)转换为m_val (T
)Shared_Ptr<T>::Shared_Ptr(const Shared_Ptr<O>& other_)
{
if(dynamic_cast<T *>(other_.m_val->m_ptr))
{}
m_val = (Shared_Ptr<T>::PtrVal *)other_.m_val;
}
有什么更好的建议吗?谢谢你 您想转换m_ptr
,而不是other_
,因为Shared_Ptr<O>
和Shared_Ptr<T>
没有继承关系。
template <typename T>
template <typename O>
Shared_Ptr<T>::Shared_Ptr(const Shared_Ptr<O>& other_):
m_val (static_cast<T*>(other_.m_val->m_ptr))
{}
您还必须更新计数器
相关文章:
- 从基类实例调用派生类方法而不进行强制转换
- C++将派生类转换为基类时'object slicing'期间发生的情况
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 从未使用过到基类的转换
- 基类到派生类的强制转换向量
- 有没有办法复制派生类指针的向量而不将其强制转换为基类?
- 为什么此代码不将基类强制转换为 c++ 中的派生类?
- 如何在运行时将指向派生类的 void* 正确转换为指向基类的 void*
- 从基类的共享指针向下转换到派生类的引用
- 为了访问方法,从基类动态转换为派生类
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- 基类到派生模板类的强制转换指针,而不知道类型
- 带有基类指针的强制转换向量,指向子类
- 通过转换基类指针来设置派生类字段
- 强制转换基类问题
- 强制转换基类保护方法的返回指针的替代方法