第一次海报。我已经使用Java几年了,并决定学习D。在Java中,您可以声明一个具有泛型类型的类,并从该类中创建一个新对象。喜欢:
public class foo<T>
{
public foo() { ... }
}
然后只需致电即可foo<String> f = new foo<>();
。我试图在D中实现相同的功能,但是出现了一个编译错误,例如:“类core.collection.RingBuffer.RingBuffer(T)被用作类型”。查看D的教程,我发现通用编程是使用模板实现的。但是,我无法在官方教程/ docs的正面或反面。有人可以给我解释一下吗?谢谢。
当您不实例化右侧的模板时,就会出现该错误-它抱怨“ 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] 删除。
我来说两句