September 22, 2017
On Friday, 22 September 2017 at 04:32:08 UTC, Josh wrote:
> As an aside, in that doc it says "The .funcptr property of a delegate will return the function pointer value as a function type". So I also tried Mix_ChannelFinished((&channelDone).funcptr); and this compiled, but caused a segfault when
> the callback ran. What would have caused this? Is it because it's a C function?

No it's because in this function are used variables that are specific to the class instance (the this). If there weren't this would work, even if it's not a good idea to do that:


struct Foo
{
    int a;
    void needThisYeahReally(){a = 0;}
    void needThisButWorkWithout(){}
}

void main()
{
    Foo foo;
    {
        auto dg = &foo.needThisButWorkWithout;
        dg.funcptr();
    }
    {
        auto dg = &foo.needThisYeahReally;
        // dg.funcptr(); // segfault because of access to this.a
    }
}


Using a pointer to a static member function was the right thing to do.
1 2
Next ›   Last »