scr*_*cry 3 templates type-inference d
只是想知道为什么这不编译.我以为编译器可以推断参数化结构的类型?
void main() {
auto arr = Arr([1,2,3]);
}
struct Arr(T) {
private T[] data;
}
Run Code Online (Sandbox Code Playgroud)
错误:
junk.d(25): Error: struct junk.Arr(T) is not a function template
junk.d(25): Error: struct junk.Arr(T) cannot deduce template function from argument types !()(int[])
Run Code Online (Sandbox Code Playgroud)
表格代码:
auto arr = Arr([1,2,3]);
Run Code Online (Sandbox Code Playgroud)
是一个调用构造函数的Arr时候Arr是一个struct.在这种情况下,没有明确的构造函数.如果存在,它可能已经模板化,参数推断确实适用于模板化构造函数.由于没有构造函数,因此参数将用于按Arr声明的顺序初始化字段.但是,当然Arr是一个模板,所以构造的类型尚不清楚.
如果您认为此案例应该有参数推断,请考虑以下事项:
struct Arr(T)
{
static if(is(T == bool))
BitArray data;
else
T[] data;
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,在模板被实例化之前,不知道字段的类型(也可能是它的顺序)...那么它将如何推断?
必须显式实例化模板:
auto arr = Arr!int([1, 2, 3]);
Run Code Online (Sandbox Code Playgroud)