2016-07-29 42 views
1

我想創建一個函數與泛型參數,但我有錯誤時,我實例化函數。Haxe錯誤與泛型函數

class Util { 
    @:generic 
    public static inline function max<T>(a:T, b:T) : T { 
     return a > b ? a : b; 
    } 
} 

沒有設定類型的主叫max

var mean:Float = 0; 
mean = Util.max(0.01, mean); 

,我發現了錯誤:

Cannot compare max.T and max.T 
Missing return max.T 

如果我浴液類型,而不是:

var mean:Float = 0; 
mean = Util.max<Float>(0.01, mean); 

我得到錯誤:

Unexpected , 

我做錯了什麼?

回答

4

類型T可能沒有>運營商。也許你可以使用一個類型約束,如:

class Util { 
    @:generic 
    public static inline function max<T:Float>(a:T, b:T):T { 
     return a > b ? a : b; 
    } 
} 

然後像這種用法應該工作:

var intMax:Int = Util.max(1, 10); 
var floatMax:Float = Util.max(1.0, 10.0); 
+1

謝謝,可能我期待一個C++模板,檢查爲'> operator'存在,當你使用/實例化模板。 – Zhen