D 语言不定参数:写法、泛型应用及示例
D 语言中可以使用不定参数的方式来定义函数,通常有以下几种写法:
- 使用'...'操作符
 
void foo(T...)(T args) {
    foreach(arg; args) {
        // do something with arg
    }  
}
这种写法中,'T...'表示参数列表可能会有多个参数,'T args'表示参数的名称为'args',并且可以使用'foreach'循环遍历参数列表。
- 使用'variadic'模板
 
void bar(alias F, T...)(T args) {
    F(args);
}
这种写法中,'alias F'表示一个函数指针,'T...'表示参数列表可能会有多个参数,'T args'表示参数的名称为'args',并且可以使用'F(args)'来调用函数指针。
- 使用'tuple'类型
 
void baz(T...)(T args) {
    auto tup = tuple(args);
    foreach(arg; tup) {
        // do something with arg
    }
}
这种写法中,'T...'表示参数列表可能会有多个参数,'T args'表示参数的名称为'args',并且可以使用'tuple'将参数列表转换为元组类型,从而可以使用'foreach'循环遍历参数列表。
除了以上几种写法,还可以通过'std.typecons.Tuple'模板来定义不定参数函数。例如:
import std.typecons;
void qux(T...)(T args) {
    Tuple!T tup = args;
    foreach(arg; tup) {
        // do something with arg
    }
}
如果要将不定参数应用于泛型的情况下,可以使用类似于以下的写法:
void func(T, Args...)(T t, Args args) {
    // do something
}
其中,'T'表示泛型类型,'Args...'表示不定参数类型,'t'表示泛型类型对象,'args'表示不定参数列表。
原文地址: https://www.cveoy.top/t/topic/opAJ 著作权归作者所有。请勿转载和采集!