2012-03-31 8 views
3

テンプレートメンバー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. 

私はこれには正当な理由を持っていないが、それが可能でなければならないような気がします。

答えて

7

名義テンプレートは、使用時にその値に置き換えられます。だから、限りコンパイラが懸念しているとして、

writeln(foo!(123).foo); 

を書くことは、基本的

writeln(123.foo); 

を書くことと同じで、それは法的ではありません。その行は基本的に同じエラーになります。あなたは同名のテンプレートのメンバーにアクセスするはずがありません。それらは意図的に不透明です。

+0

これは違いはありませんが、Alexandrescuはこの操作をコンパイラによるリテラル書き換えと記述しています。それは 'foo!(123).foo.foo'のようなものになります。 – Tim

2

気まぐれなテンプレートは不透明ではありません。あなたはそれらのように彼らに乗ることはできません。

関連する問題