2012-03-31 4 views
3

Template Mitglieder may be implicitly referred to, wenn sie das einzige Mitglied einer Vorlage sind, und wenn sie den Namen der Vorlage teilen:Wie beziehe ich mich explizit auf dieses Vorlagenmitglied?

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

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

Aber was, wenn ich auf das Element beziehen möchten ausdrücklich?

writeln(foo!(123).foo); // Error: attempts to access the foo property of int. 

Ich habe keinen guten Grund dafür, aber ich fühle mich wie es möglich sein muss.

Antwort

7

Titelvorlagen werden mit ihren Werten ersetzt, wenn sie verwendet werden. Also, so weit wie der Compiler betroffen ist, das Schreiben

writeln(foo!(123).foo); 

ist im Grunde das gleiche wie das Schreiben

writeln(123.foo); 

Und das ist nicht legal. Diese Zeile würde im Grunde den gleichen Fehler ergeben, den Sie bekommen. Sie sollten nicht auf die Mitglieder einer gleichnamigen Vorlage zugreifen. Sie sind absichtlich undurchsichtig.

+0

Nicht, dass es einen Unterschied macht, aber Alexandrescu beschreibt diese Operation als eine wörtliche Neuschreibung durch den Compiler. Das würde es mehr wie "foo! (123) .foo.foo" schreiben. – Tim

2

Sie können nicht - Titelvorlagen sind opak; Sie können nicht so auf sie bekommen.

Verwandte Themen