【发布时间】:2011-03-22 21:09:42
【问题描述】:
我有自己的 SmartPointer 类。
在某些情况下,SmartPtr 包含继承自 Base 类的类,我想转换 SmartPtr<ClassX> into SmartPtr<BaseClassOfClassX>;
我正在尝试重载 SmartPtr Conversion 运算符来执行此操作。
它适用于类本身,例如:
template<class newType>
operator SmartPtr<newType>() const
{
return SmartPtr<newType>((SmartPtr<newType>*)this);
}
但不是指向类的指针,我尝试了以下方法,它永远不会被调用并得到以下错误:
template<class newType>
operator SmartPtr<newType>*() const
{
return static_cast<SmartPtr<newType>*>(this);
}
获取错误的简单代码:
SmartPtr<ClassX> test(pClassX);
SmartPtr<BaseClassOfClassX>* ob = &test;
ERROR:
cannot convert from 'SmartPtr<T> *' to 'SmartPtr<T> *'
有人看到我的第二次转换超载有什么问题吗? 谢谢
【问题讨论】:
标签: operator-overloading type-conversion