On Tuesday, 29 May 2018 at 20:26:52 UTC, arturg wrote:
On Tuesday, 29 May 2018 at 19:06:24 UTC, DigitalDesigns wrote:
On Monday, 28 May 2018 at 22:15:40 UTC, arturg wrote:
this might help you,
https://dpaste.dzfl.pl/2cf844a11e3f

you can use them to generate the functions as strings.

Thanks,

So, the problem I'm having is that I cannot use the generated interface for the abstract class because the abstract class needs the interface defined. I need to be able to forward define the interface then extend it.

D doesn't like this

main.d(10): Error: interface `main.B` base `A` is forward referenced

interface A;
mixin(Generate!(B,A));
interface B : A
{

}

abstract class C : B
{

}


would it work if you define the interface but mixin the members?

interface A
{
    mixin(InterfaceFromClass!C);
}

Yes, I made a post about it but it didn't get through or I forgot to send ;/

Doing it this way solves the original problems but creates a new problem in that any class that inherits from an abstract class that implements A doesn't work.

interface A
{
    mixin(InterfaceFromClass!C);
}

abstract class B : A
{
    A foo() { return this; }
    int bar() { return 3; }
}


class C : B
{
    // compiler says foo, bar not implemented
}


so, instead

interface A
{
    mixin(InterfaceFromClass!C);
}

abstract class B
{
    A foo() { return this; } // requires cast
    int bar() { return 3; }
}


class C : B, A
{

}


works but requires casting this in B which happens to work in C. So It is a fessible solution but I'm not sure why the compiler things the first case doesn't implement the methods when it clearly does. I think it looks at A and doesn't compute the mixin first when parsing C because if I put the output of the mixin directly it works. Probably a bug...

Reply via email to