2016-07-29 45 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