Pointers Vala中作为返回值的可空指针
假设我们有这样的东西(这只是一个例子) 这段代码工作得非常好,但问题是Pointers Vala中作为返回值的可空指针,pointers,vala,generic-interface,Pointers,Vala,Generic Interface,假设我们有这样的东西(这只是一个例子) 这段代码工作得非常好,但问题是Foo必须是带有public abstract T*f()的泛型,因此Toto必须实现Foo,但是 `“double”不是受支持的泛型类型参数 (我的第一个问题是“为什么?”,据我所知,我可以毫无问题地使用int作为例子) 所以它是Foo,我需要像double i=(!)*(a.f())这样的东西,但它就是不起作用(在C级别) 错误:无效使用void表达式i=(gdouble)(*(*_tmp1)) 那么如何使用f()方法呢
Foo
必须是带有public abstract T*f()
的泛型,因此Toto
必须实现Foo
,但是
`“double”不是受支持的泛型类型参数
(我的第一个问题是“为什么?”,据我所知,我可以毫无问题地使用int作为例子)
所以它是Foo
,我需要像double i=(!)*(a.f())
这样的东西,但它就是不起作用(在C级别)
错误:无效使用void表达式i=(gdouble)(*(*_tmp1))代码>
那么如何使用f()
方法呢
(我的vala版本是0.36.3)首先为什么要在vala中使用指针?(这是不鼓励的,指针使用的语言适用于转角情况。)
Vala中的可空类型是生成的C代码中的指针
因此,解决这一问题的一种方法是:
public interface Foo<T> : GLib.Object {
public abstract T f();
}
public class Toto : GLib.Object, Foo<double?> {
private double i;
public Toto(double i = 0) {
this.i = i;
}
public double? f() {
return i;
}
public static int main(string[] args) {
Foo<double?> a = new Toto(42.0);
double? i = a.f();
stdout.printf("%.3f\n", (!) i);
return 0;
}
}
是的,当然,我明白使用指针并不是一个好主意(我不再使用指针了),现在它更像是一个抽象的问题。的确,使用公共抽象T*f()
一切都正常,但出于某种神秘的原因,我想使用公共抽象T*f()
,在这种情况下,一切都变得非常混乱。无论如何,谢谢你的回答。在这一点上我和你是一致的,Vala仿制药可能会让人困惑。不过,我很感激瓦拉拥有它们:)。
public interface Foo<T> : GLib.Object {
public abstract T f();
}
public class Toto : GLib.Object, Foo<double?> {
private double i;
public Toto(double i = 0) {
this.i = i;
}
public double? f() {
return i;
}
public static int main(string[] args) {
Foo<double?> a = new Toto(42.0);
double? i = a.f();
stdout.printf("%.3f\n", (!) i);
return 0;
}
}
static gdouble* toto_real_f (Foo* base);