September 22, 2017 Re: Problems with function as parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to Josh | 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.
|
Copyright © 1999-2021 by the D Language Foundation