digitalmars.D.learn - AliasSeq of T.tupleof for class and all base classes
- bitwise (28/28) Sep 29 2017 As far as I can tell, this code should compile:
- Steven Schveighoffer (7/42) Sep 30 2017 I think the problem may be that derived classes' tupleof has some of the...
As far as I can tell, this code should compile: class B { int a; } class D1 : B { int b; } class D2 : D1 { int c; } template TupleOf(Classes...) { static if(Classes.length > 1) alias TupleOf = AliasSeq!(Classes[0].tupleof, TupleOf!(Classes[1..$])); else static if(Classes.length == 1) alias TupleOf = AliasSeq!(Classes[0].tupleof); else alias TupleOf = AliasSeq!(); } int main(string[] argv) { alias allClasses = AliasSeq!(D2, BaseClassesTuple!D2); alias allFields = TupleOf!allClasses; return 0; } But I get this: Error: template instance AliasSeq!(b, a) AliasSeq!(b, a) is nested in both D1 and B Error: template instance main.TupleOf!(D1, B, Object) error instantiating instantiated from here: TupleOf!(D2, D1, B, Object) Any ideas? Thanks
Sep 29 2017
On 9/29/17 11:39 PM, bitwise wrote:As far as I can tell, this code should compile: class B { int a; } class D1 : B { int b; } class D2 : D1 { int c; } template TupleOf(Classes...) { static if(Classes.length > 1) alias TupleOf = AliasSeq!(Classes[0].tupleof, TupleOf!(Classes[1..$])); else static if(Classes.length == 1) alias TupleOf = AliasSeq!(Classes[0].tupleof); else alias TupleOf = AliasSeq!(); } int main(string[] argv) { alias allClasses = AliasSeq!(D2, BaseClassesTuple!D2); alias allFields = TupleOf!allClasses; return 0; } But I get this: Error: template instance AliasSeq!(b, a) AliasSeq!(b, a) is nested in both D1 and B Error: template instance main.TupleOf!(D1, B, Object) error instantiating instantiated from here: TupleOf!(D2, D1, B, Object) Any ideas? ThanksI think the problem may be that derived classes' tupleof has some of the same variables as the base class? I agree it should work, but I think if it did work, it may not be what you want. You would see a lot of repeats. BTW, AliasSeq!(x.tupleof) is redundant, x.tupleof is already an AliasSeq. -Steve
Sep 30 2017
On Saturday, 30 September 2017 at 12:42:17 UTC, Steven Schveighoffer wrote:I think the problem may be that derived classes' tupleof has some of the same variables as the base class? I agree it should work, but I think if it did work, it may not be what you want. You would see a lot of repeats..tupleof doesn't return fields from base classes. assert(D2.tupleof.stringof == "tuple(c)");
Sep 30 2017
On Saturday, 30 September 2017 at 12:42:17 UTC, Steven Schveighoffer wrote:[...]https://issues.dlang.org/show_bug.cgi?id=17870
Oct 01 2017