【发布时间】:2015-01-24 04:24:44
【问题描述】:
在下面的示例中,我有一个 Foo 对象,它有一个通用的 T 和一个 foo 类型为 T 的字段。
Foo 是可继承的,并且有一个名为 test 的过程,它应该创建并返回由子类定义的 T 类型的序列。
在我的代码的最新版本中,test proc 的第一行有错误:
无法实例化:'T'
如果我去掉 S 类型并将其替换为 FooP,错误就会消失,但随后我在 discard b.test() 行上收到错误:
类型不匹配:得到 (BarP)
代码如下:
type
Foo[T] = object {.inheritable.}
foo:T
FooP[T] = ref Foo[T]
proc test[S, T](self: S): seq[T] =
var f: T = self.foo
var s: seq[T] = @[f]
s
type
Bar = object of Foo[int]
BarP = ref Bar
var b: BarP = new(Bar)
discard x.test()
我确定我刚刚搞砸了。有人能告诉我test() 在这种情况下如何成功返回子类定义的T 类型的序列吗?
【问题讨论】: