2016-07-29 11 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); 

Iエラーを取得する:

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

おかげで、おそらく私はあなた '> operator'存在をチェックC++テンプレートを期待していたがテンプレートを使用/インスタンス化します。 – Zhen