gpt4 book ai didi

templates - 类的 Dlang 泛型

转载 作者:行者123 更新时间:2023-12-02 06:32:59 26 4
gpt4 key购买 nike

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

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

然后简单地调用foo<String> f = new foo<>(); .我试图在 D 中实现相同的功能,但出现编译错误,例如:“class core.collection.RingBuffer.RingBuffer(T) is used as a type”。查看D的教程,我发现泛型编程是使用模板实现的。但是,我无法确定官方的正反面 tutorials/docs .有人可以向我解释一下吗?谢谢。

最佳答案

当您没有在右侧实例化模板时会出现该错误 - 它会提示“foo 被用作一种类型”,因为 foo 本身还不是一种类型,它是一种类型的模板。这意味着在用 !(arguments) 实例化之前,它不会成为实际类型。

您的 Java 代码 new foo<>()在 D 中不完全是这样:在 D 中,您需要在右侧给出类型。

所以尝试:

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

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

模板参数周围的括号,在 ! 之后, 如果后面只有一个单词,则为可选,因此这两个意思相同。

在 D 中不需要将类型写两次,但与其将其留在右侧,不如通过类型推断将其留在左侧。这也会编译:

auto f = new foo!string();

这在 D 中很常见。

关于templates - 类的 Dlang 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645999/

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