Template with template?

Vladimir Panteleev vladimir at thecybershadow.net
Thu Mar 20 09:32:33 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
> }

Person!(Trait!(string, string)) person;

-- or --

alias MyTrait = Trait!(string, string);
Person!MyTrait person;

Note that this approach won't let you have traits with different 
parameters within the same Person type.


More information about the Digitalmars-d-learn mailing list