2017-05-06 6 views
3

私はその値を印刷することができる汎用クラスを作成しようとしています。Vala - 一般的な値を出力する

main.vala:8.21-8.22: error: The name `to_string' does not exist in the context of `T' 
     stdout.puts(@"x: $x, y: $y\n"); 
         ^^ 
main.vala:8.28-8.29: error: The name `to_string' does not exist in the context of `T' 
     stdout.puts(@"x: $x, y: $y\n"); 
           ^^ 

これをうまくする方法はあります:

class Point<T> 
{ 
    public T x {get; set; default = 0;} 
    public T y {get; set; default = 0;} 

    public void print() 
    { 
     stdout.puts(@"x: $x, y: $y\n"); 
    } 
} 

int main(string[] args) 
{ 
    var point = new Point<int>(); 
    point.x = 12; 
    point.y = 33; 
    point.print(); 

    return 0; 
} 

コンパイラは私にこれらのエラーを与えますか?

答えて

4

直接ではありません。ジーが行うようにあなたは特殊なケースのセットを構築することができ、また

delegate string Stringify<T>(T item); 
class Point<T> 
{ 
    public T x {get; set; default = 0;} 
    public T y {get; set; default = 0;} 

    public void print(Stringify<T> stringifier) 
    { 
     stdout.puts(@"x: $(stringifier(x)), y: $(stringifier(y))\n"); 
    } 
} 
int main(string[] args) 
{ 
    var point = new Point<int>(); 
    point.x = 12; 
    point.y = 33; 
    point.print(int.to_string); 
    return 0; 
} 

https://github.com/GNOME/libgee/blob/master/gee/functions.vala#L49

あなたはあなたの商品を印刷するために、デリゲートに渡す必要があります
関連する問題