Template with template?

John Colvin john.loughran.colvin at gmail.com
Thu Mar 20 09:33:13 PDT 2014


On Thursday, 20 March 2014 at 16:28:46 UTC, Chris wrote:
> How can I instantiate Person with Trait, i.e. a template with a 
> template?
>
> struct Trait(T0, T1) {
>   T0 name;
>   T1 value;
>   T1[T0] map;
>
>   this(T0 name, T1 value) {
>     this.name = name;
>     this.value = value;
>     map[name] = value;
>   }
> }
>
> class Person(T) {
>   T traits[];
>
>   void addTrait(T trait) {
>     traits ~= trait;
>   }
> }
>
>
> void main()
> {
>   auto trait1 = Trait!(string, string)("Name", "John");
>   auto trait2 = Trait!(string, int)("Age", 42);
>   writefln(%s", trait1.map);
>   writefln(%s", trait2.map);
>   // above code compiles and works
> }

templates can be passed to templates as alias parameters, or as 
part of a TemplateArgumentTuple. See 
http://dlang.org/template.html#aliasparameters


More information about the Digitalmars-d-learn mailing list