AliasSeq of T.tupleof for class and all base classes
Steven Schveighoffer
schveiguy at yahoo.com
Sat Sep 30 12:42:17 UTC 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?
>
> Thanks
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.
BTW, AliasSeq!(x.tupleof) is redundant, x.tupleof is already an AliasSeq.
-Steve
More information about the Digitalmars-d-learn
mailing list