如何明确引用此模板成员?

时间:2012-03-31 03:49:50

标签: templates d implicit explicit

模板成员may be implicitly referred to如果他们是模板的唯一成员,并且他们共享模板的名称:

template foo(int number)
{
    immutable int foo = number;
}

void main()
{
    writeln(foo!(123)); // Okay.
}

但是,如果我想明确引用成员

,该怎么办?
writeln(foo!(123).foo); // Error: attempts to access the foo property of int.

我没有充分理由这样做,但我觉得它一定是可能的。

2 个答案:

答案 0 :(得分:7)

使用时,同名模板将替换为其值。所以,就编译器而言,编写

writeln(foo!(123).foo);

与写作基本相同

writeln(123.foo);

这不合法。该行将导致与您获得的基本相同的错误。您不应该访问同名模板的成员。它们是故意不透明的。

答案 1 :(得分:2)

你不能 - 同名的模板是不透明的;你不能那样对待他们。