31. decltype 宏和模板函数注释

模板为 Daslang 提供了类似模板的例程集合。

所有函数和符号都在 “templates ”模块中,使用 require 可以访问该模块。

require daslib/templates

31.1. 函数注释

template

该宏用于删除泛型函数实例化中未使用的(模板)参数。 指定 [template(x)] 时,参数 x 将从函数调用中移除,但实例类型保持不变。 函数实例化的调用也会随之调整。 例如:

[template (a), sideeffects]
def boo ( x : int; a : auto(TT) )   // when boo(1,type<int>)
    return "{x}_{typeinfo(typename type<TT>)}"
...
boo(1,type<int>) // will be replaced with boo(1). instace will print "1_int"

31.2. 调用宏

decltype

此宏返回相应表达式的 ast::TypeDecl。例如:

let x = 1
let y <- decltype(x) // [[TypeDecl() baseType==Type tInt, flags=TypeDeclFlags constant | TypeDeclFlags ref]]
decltype_noref

此宏返回相应表达式的 TypeDecl,减去 ref (&) 部分。