On Thursday, 20 March 2014 at 16:32:34 UTC, Vladimir Panteleev wrote:
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.

Yep, I've already tried this (sorry I should've mentioned it!). But I don't want this restriction.

Reply via email to