2010-07-29 90 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的類型的引用不是也不類任何隱式轉換爲一個類,你不能直接重載上的指針的類型轉換。根據你爲什麼需要指向你的智能指針的指針,也許你真的想要使用更常見的引用。