我有自己的SmartPointer类。
在某些情况下,SmartPtr包含从基类继承的类,我想转换SmartPtr<ClassX> into SmartPtr<BaseClassOfClassX>;
我正在尝试使SmartPtr Conversion运算符过载。
它对Class本身很好用,例如:
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> *'
有人看到我的第二次转换超载出了什么问题吗?
谢谢
最佳答案
根据C++标准:“运算符应为非静态成员函数或为非成员函数,并至少具有一个
类型为类,对类的引用,枚举或对枚举的参数。”
由于&test
的类型不是类,也不是可隐式转换为类的任何东西,因此您不能直接在指针上重载类型转换。根据您为什么需要指向智能指针的指针,也许您真的想使用引用,这种引用更为常见。