Metaprogramming work around

Kenji Hara k.hara.pg at gmail.com
Tue Apr 17 05:46:27 PDT 2012


On Tuesday, 17 April 2012 at 12:04:44 UTC, Erèbe wrote:
[snip]
>
> There is something I still don't understand :
>
> mixin template Foo( T... )
> {
> //Code here
> }
>
> mixin Foo!( "Hello", "Word" ); <---- Good

T is TemplateTypeParameter, and matches any kind of template 
arguments - types, values, and symbols. The both arguments 
"Hello" and "World" are values, so you can bind them with T.

http://dlang.org/template.html#TemplateTupleParameter

> --------------------------------------------
>
> "mixin template Foo( A, T... )
> {
> //code here
> }
>
> mixin Foo!( "Hello", "Word" ); <--- Fail !
> mixin Foo!( string, "Word" ); <---- Good
> --------------------------------------------

'A' is TemplateTypeParameter, and it matches only types. In the 
first instantiation of Foo, A doesn't match with the value 
"hello".
In the second instantiation, string is type, and T matches with 
it.

http://dlang.org/template.html#TemplateTypeParameter

> mixin template Foo( alias A, T... )
> {
> //code here
> }
>
> mixin Foo!( "Hello", "world" ); <--- Good
> mixin Foo!( string, "world" ); <--- Fail !
>
> ---------------------------------------------

'alias A' is TemplateAliasParameter, and it matches both symbols 
and values.
Then A matches with the value "Hello", but doesn't with the type 
string.
(string is an aliased name of immutable(char)[], and it is 
built-in array type.)

http://dlang.org/template.html#TemplateAliasParameter

Kenji Hara


More information about the Digitalmars-d-learn mailing list