2014-03-29 37 views
0

我有一個像desribed一個原型類:haxe - 如何自動爲原型clone()函數投射類型?

class CEnumList<T:EnumValue> { 
    ... 
    public function clone():CEnumList<T> { 
     var result:CEnumList<T> = new CEnumList<T>(); 
     ... 
     return result; 
    } 
} 

克隆方法實現創建實例的完整副本的標準程序。我有一個繼承類:

class CElements extends CEnumList<EElements> { 
    ... 
} 

其中EElements是枚舉類型。但是,當我打電話的地方:

var damage:CElements = baseDamage.clone(); 

我有一個錯誤「data.CEnumList應該是data.char.CElements」,這是完全正確的。但是,如果我的繼承類只有枚舉類型不同,我該如何繼承原型clone()方法?我是否應該創建儘可能多的clone()方法,因爲我擁有不同的類,並且所有這些方法都只會投射專用基類克隆的類型?

也許這不是一個關於haxe的問題,而是關於應用程序體系結構的問題。

回答

1

如果您需要完全返回CElements,那麼您需要另一個返回CElements的克隆方法。

但你可能想不延長 CEnumList但的typedef像這樣

typedef CElements = CEnumList<EElements>; 

這應該做的伎倆,因爲結果將被正確輸入(如類型將是相同的,typedef剛給出同義詞)。