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