跳转至

模板

我们使用 </xxx/> 来定义一个模板。

fn my_func</typename T/>(T arg1) {
    println(`${typenameof T}: $arg1`);
}

我们可以这样使用上述函数

fn main() {
    my_func(123);
    my_func("abc");
}

我们可以对模板进行特化。
注意特化必须在模板声明后

fn my_func</typename T/>(T arg1) {
    println(arg1);
}

fn my_func</int/>(T arg1) {
    println(`整数:$arg1`);
}

注意模板在实例化时才会检查,也就是模板如果不使用程序员可能不会发现其中的语法错误。
因此我们建议对模板进行完整的单元测试。

fn my_func</typename T/>(T arg1) {
    println(arg1 << 1); // 由于不知道 T 的类型,无法检查是否能够左移
}

fn main {
    my_func(123);     // 整数可以左移,通过编译
    my_func(123.456); // 浮点数不能左移,这里会报错
    return 0;
}

也可以手动对其类型进行限制:

@staticassert(T !is floattype)
fn my_func</typename T/>(T arg1) {
    println(arg1 << 1); // 由于不知道 T 的类型,无法检查是否能够左移
}

对模板进行显式的实例化。

fn my_func</int/>;