2016-07-29 11 views
1

Ich versuche, eine Funktion mit generischen Parametern zu erstellen, aber ich habe Fehler, wenn ich die Funktion instanziiere.Haxe Fehler mit generischer Funktion

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

max aufrufe, ohne den Einstellung Typ:

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

ich die Fehler bekommen:

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

Wenn ich Float-Typen gesetzt statt:

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

I Erhalte die Fehler:

Unexpected , 

Was mache ich falsch?

Antwort

4

Typ T hat möglicherweise keinen Operator >. Vielleicht können Sie eine Typeinschränkung wie verwenden:

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

Und dann Nutzung wie dies funktionieren soll:

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

Dank, wahrscheinlich eine C++ Vorlage Ich hatte erwartet, dass für die '> Unternehmer Existenz überprüft, wenn Sie Verwenden Sie/instanziieren Sie die Vorlage. – Zhen

Verwandte Themen