2010-07-29 108 views
3

我有我自己的SmartPointer类。C++转换运算符超载问题

在有些情况下的SmartPtr包含了从基类inherite类的情况下,我想转换SmartPtr<ClassX> into SmartPtr<BaseClassOfClassX>;

我试图重载的SmartPtr转换操作符来做到这一点。

它做工精细的类自理,如:

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> *' 

有谁看到什么是错我的第二个转换过载? 由于

回答

0

从C++标准:“操作员功能必须是某个非静态成员函数或是非成员函数和具有至少一个 参数类型为一个类,一类的基准,枚举,或枚举。

作为&test的类型的引用不是也不类任何隐式转换为一个类,你不能直接重载上的指针的类型转换。根据你为什么需要指向你的智能指针的指针,也许你真的想要使用更常见的引用。