CT Inheritence structures

Engine Machine via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Aug 20 12:22:30 PDT 2016


On Saturday, 20 August 2016 at 09:42:08 UTC, Jack Applegame wrote:
> On Saturday, 20 August 2016 at 00:46:15 UTC, Engine Machine 
> wrote:
>> Any ideas?
> Something like this?
>
> mixin template TypeData(string type: "Animal") {
>     int y;
> }
> mixin template TypeData(string type: "Dog") {
>     int z;
> }
> mixin template TypeData(string type: "Pug") {
>     int s;
> }
>
> template Type(string type, ARGS...) {
>     static if(ARGS.length == 0) {
>         class Type {
>             mixin TypeData!type;
>         }
>     } else {
>         class Type : Type!ARGS {
>             mixin TypeData!type;
>         }
>     }
> }
>
> void main() {
>     auto a = new Type!("Pug", "Dog", "Animal")();
>     Type!("Dog", "Animal") b = a;	
>     Type!("Animal") c = b;	
> 	
>     a.s = 1;
>     b.z = 2;
>     c.y = 3;
>
>     pragma(msg, typeof(a));
>     pragma(msg, typeof(b));
>     pragma(msg, typeof(c));
> }
>
> See result - https://dpaste.dzfl.pl/1a76490aaf55

No, this is just standard inheritance that has been complexified. 
The point is to have a single class that encapsulates it's own 
derived types. You have a type constructor. It also doesn't solve 
the original problem.





More information about the Digitalmars-d-learn mailing list