鏈接到我的其他問題(Can I make an assignment operator on a base class that returns sub-class type)我有這樣的結構,這個想法是我希望得到專門的類型從GPtrBase
,而無需每次都重新寫一個賦值操作符:當我專門喜歡遞歸模板模式;何時完成?
template<class BaseType,class Self>
class GPtrBase
{
public:
...
Self& operator=(const BaseType& rhs)
{
...
return *this;
}
};
然而:
class GDrawablePtr : public GPtrBase<MyDrawable,GDrawablePtr>
我得到的錯誤:
「迴歸」:不能從轉換「GPtrBase <基地,自>」到「GDrawablePtr &」
我想基於使用的專業化生成一個模板類,所以不宜*this
是在首位輸入GDrawablePtr
?
更新:我注意到,如果我添加using GPtrBase::operator=;
它,然後工作,即使GDrawablePtr
絕對不會不定義任何運營商。
您發佈的代碼原樣:http://ideone.com/4grkfv – SomeWittyUsername 2013-04-25 11:46:12
@icepack非常奇怪。 Eiter這是我的編譯器(VC++ 2005)的一個怪癖,或者完整代碼的一些細節應該歸咎於它。我會用較簡單的版本進行調查來檢查。 – 2013-04-25 12:03:02
@icepack不,它不。由於其參數的類型,「operator =」會被忽略。請參閱http://ideone.com/EWrVAh的程序輸出。由於不需要,編譯器不會嘗試編譯它,因此缺少錯誤消息。 – NonNumeric 2013-04-25 17:34:39