Template with template?
Chris
wendlec at tcd.ie
Thu Mar 20 09:40:49 PDT 2014
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.
More information about the Digitalmars-d-learn
mailing list