说我只想要一个模板来生成"一个类型,来自泛型参数,并在需要类型的地方使用模板的调用:
template p[T] = T
var a: p[int]()
大声笑,真的吗? 我希望我只是一个新手,而且确实有一种方法(希望无条件)这样做。(3,14)错误:表达' T'属于'类型int'并且必须是 丢弃
请注意,它是相同的输出,具有非通用尝试:
template p(t: typedesc) = t
var a: p(int)
编辑:阅读this insightful answer,我意识到如果我们指定模板的返回类型,系统可能会感觉更加轻拍;在: untyped
之前添加= t
获得之前的代码片段。任何解释?
答案 0 :(得分:2)
template p[T] = T
var a: p[int]()
这与:
相同template p[T]: void = T
var a: p[int]()
你告诉编译器你的模板没有返回任何内容,这就是它抱怨的原因。
所以你需要指定返回类型......
template p[T]: typedesc = T
var a: p[int]()
然后它工作正常。此行为扩展到Nim中的过程和方法,而不指定返回类型意味着没有返回值。
答案 1 :(得分:2)
在Nim中从类型到类型的编译时函数通常用typedesc
parameters实现。与通用参数相比,这具有额外的好处,允许以不同方式提供处理不同类型的多个重载:
typedesc
请注意,您始终需要指定模板的返回类型为showSpinner
。