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