Pointers to non-static member functions!
Daniel Murphy
yebblies at nospamgmail.com
Wed Jun 8 07:40:48 PDT 2011
"Steven Schveighoffer" <schveiguy at yahoo.com> wrote in message
news:op.vwrgycgjeav7ka at localhost.localdomain...
>
> The reason is to allow composition of delegates (not that I think this is
> a worthy reason):
>
> class A
> {
> void func();
> void func2();
> }
>
> void main()
> {
> auto f = &A.func2;
> auto a = new A();
> auto g = &a.func; // delegate
> g.funcptr = f;
> g(); // calls a.func2()
> }
>
> I'd argue that a much more useful return type would be a delegate with the
> this pointer set to null, but then I don't know what funcptr would
> return. I almost think you need a separate type for it, which seems like
> a lot of effort for something that's hardly used.
>
> -Steve
I can see this being useful, but I think it should be done by having
delegate.funcptr be a void* and &ClassType.nonstaticmemberfunction return
void*.
The type safety provided by the current way it works is an illusion, as the
following compiles:
class A
{
void func() { do something using member variables or the vtable etc }
}
class B
{
void func() {}
}
void main()
{
auto b = new B();
auto dg = &b.func;
dg.funcptr = &A.func;
dg(); // Probably a segfault
}
More information about the Digitalmars-d
mailing list