表达' T'属于'类型int'并且必须丢弃

时间:2018-03-31 11:30:38

标签: templates nim

说我只想要一个模板来生成"一个类型,来自泛型参数,并在需要类型的地方使用模板的调用:

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获得之前的代码片段。任何解释?

2 个答案:

答案 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