Как явно указать этот элемент шаблона? - PullRequest
3 голосов
/ 31 марта 2012

Члены шаблона могут неявно ссылаться на , если они являются единственным членом шаблона, и если они разделяют имя шаблона:

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 ]

7 голосов
/ 31 марта 2012

При использовании одноименные шаблоны заменяются их значениями.Итак, что касается компилятора, запись

writeln(foo!(123).foo);

в основном такая же, как запись

writeln(123.foo);

И это не законно.Эта строка может привести к той же самой ошибке, которую вы получаете.Вы не должны иметь доступ к членам одноименного шаблона.Они намеренно непрозрачны.

2 голосов
/ 31 марта 2012

Вы не можете - одноименные шаблоны непрозрачны; ты не можешь так на них попасть.

...