类的Dlang泛型

筛子

第一次海报。我已经使用Java几年了,并决定学习D。在Java中,您可以声明一个具有泛型类型的类,并从该类中创建一个新对象。喜欢:

public class foo<T>
{
    public foo() { ... }
}

然后只需致电即可foo<String> f = new foo<>();我试图在D中实现相同的功能,但出现了一个编译错误,例如:“类core.collection.RingBuffer.RingBuffer(T)被用作类型”。通过查看D的教程,我发现通用编程是使用模板实现的。但是,我不能在官方教程/ docs的正面或反面有人可以给我解释一下吗?谢谢。

亚当·鲁珀(Adam D.Ruppe)

当您不实例化右侧的模板时,就会出现该错误-它抱怨“ foo被用作类型”,因为foo本身还不是类型,它是类型的模板。这意味着直到用!(参数)实例化后,它才变为实际类型。

您的Java代码与new foo<>()D中的代码并不完全相同:在D中,您需要在右侧提供类型。

因此,请尝试:

foo!string f = new foo!string();

或者

foo!(string) f = new foo!(string)();

如果模板参数后面的括号内!只有一个单词,则该括号是可选的,因此这两个含义相同。

在D中不需要两次编写类型,但是您可以使用类型推断将其放在左侧,而不是放在右侧。这也将编译:

auto f = new foo!string();

这在D中很常见

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档