- 类型化和无类型形参
类型化和无类型形参
无类型 参数表示在将表达式传递给模板之前不执行符号查找和类型解析。 这意味着例如 未声明 标识符可以传递给模板:
- template declareInt(x: untyped) =
- var x: int
- declareInt(x) # 有效
- x = 3
- template declareInt(x: typed) =
- var x: int
- declareInt(x) # 无效,因为x尚未声明,因此没有类型
每个参数都是 无类型 的模板称为 立即 模板。 由于历史原因模板可以使用 立即 编译指示进行显式注释,然后这些模板不会参与重载分辨率,编译器会 忽略 参数的类型。 现在不推荐使用显式立即模板。
注意: 由于历史原因 stmt 是类型化 typed 的别名, expr 是无类型 untyped 的别名, 但他们被移除了。