Max*_*xpm 3 templates d explicit implicit
如果模板成员是模板的唯一成员,并且它们共享模板的名称,则可以隐式引用模板成员:
template foo(int number)
{
immutable int foo = number;
}
void main()
{
writeln(foo!(123)); // Okay.
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想明确地引用该成员呢?
writeln(foo!(123).foo); // Error: attempts to access the foo property of int.
Run Code Online (Sandbox Code Playgroud)
我没有充分的理由,但我觉得这一定是可能的.
使用时,同名模板将替换为其值.所以,就编译器而言,写作
writeln(foo!(123).foo);
Run Code Online (Sandbox Code Playgroud)
与写作基本相同
writeln(123.foo);
Run Code Online (Sandbox Code Playgroud)
这不合法.该行将导致与您获得的基本相同的错误.您不应该访问同名模板的成员.它们是故意不透明的.