gpt4 book ai didi

generics - Vala 接口(interface)泛型编译器错误

转载 作者:行者123 更新时间:2023-12-02 03:51:51 25 4
gpt4 key购买 nike

我有以下小例子(vala 0.18.1):

namespace Learning
{
public interface IExample<T>
{
public abstract void set_to(T val);
public abstract T get_to();
}

public class Example : Object, IExample<double>
{
private double to;

public void set_to(double val)
{
to = val;
}

public double get_to()
{
return to;
}

public string to_string()
{
return "Example: %.5f".printf(to);
}
}

public class Test
{
public static void main(string[] args)
{
stdout.printf("Start test\n");

Example ex = new Example();

stdout.printf("%s\n", ex.to_string());
ex.set_to(5.0);
stdout.printf("%s\n", ex.to_string());

stdout.printf("End test\n");
}
}
}

这会引发错误:

/src/Test.vala.c: In function ‘learning_test_main’:
/src/Test.vala.c:253:2: error: incompatible type for argument 2 of ‘learning_iexample_set_to’
/src/Test.vala.c:117:6: note: expected ‘gconstpointer’ but argument is of type ‘double’
error: cc exited with status 256
Compilation failed: 1 error(s), 0 warning(s)

现在,我可以从 Vala 中的泛型接口(interface)的少量文档中找到,http://www.vala-project.org/doc/vala-draft/generics.html#genericsexamples ,这应该有效。当我检查生成的 C 代码时,它显示示例的 set_to 函数采用 double ,IExample 的 set_to 函数采用 gconstpointer。

那么为什么 main 函数使用 gconstpointer 版本而不是 double 版本呢?有人可以向我解释为什么它不起作用以及解决它的方法吗?

感谢您的帮助。

附言是的,我知道找到的文件是草稿文件。

答案代码:根据下面选择的答案,这就是我将代码更改为的内容。

namespace Learning
{
public interface IExample<T>
{
public abstract void set_to(T val);
public abstract T get_to();
}

public class Example : Object, IExample<double?>
{
private double? to;

public void set_to(double? val)
{
to = val;
}

public double? get_to()
{
return to;
}

public string to_string()
{
return (to == null) ? "NULL" : "Example: %.5f".printf(to);
}
}

public class Test
{
public static void main(string[] args)
{
stdout.printf("Start test\n");

Example ex = new Example();

stdout.printf("%s\n", ex.to_string());
ex.set_to(5.0);
stdout.printf("%s\n", ex.to_string());

stdout.printf("End test\n");
}
}
}

最佳答案

而不是使用 IExample<double> , 使用 IExample<double?>装箱 double这样它就可以作为指针传递。这通常对于任何 struct 都是必要的输入 Vala。类和紧凑类不需要这种处理,因为它们已经是指针。另外,struct小于 32 位的类型(即使在 64 位平台上),例如 uint8char可以不用装箱直接使用。如有疑问,框。

关于generics - Vala 接口(interface)泛型编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14096999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com