Thanks, I'll look into it. On Fri, May 4, 2012 at 11:25 AM, Jacob Carlborg <d...@me.com> wrote: > On 2012-05-03 20:46, Gor Gyolchanyan wrote: >> >> I need to get a pointer to a virtual method, which is in turn a >> function pointer, being set by virtual method binding. >> Can anyone, please, tell me how to get it? Taking the delegate of the >> method won't do, because I need it to behave exactly as a virtual >> method call, except I pass the "this" explicitly. >> I need this in an event handling mechanism I'm making. You derive from >> the Sink class, passing your static type to the constructor, which >> scans your virtual methods, that conform to specific requirements and >> extracts them into an array, which later uses to dispatch the incoming >> events. >> It will feel much like a run-time virtual template method. > > > You can use two delegates: > > class Foo > { > void bar () > { > writeln("Foo"); > } > > void delegate () resolveVirtualCall () > { > return &bar; > } > > static void forwardVirtualCall (Foo object) > { > void delegate () delegate () dg; > dg.ptr = cast(void*) object; > dg.funcptr = &resolveVirtualCall; > dg()(); > } > } > > class Bar : Foo > { > void bar () > { > writeln("Bar"); > } > } > > void main() > { > Foo b = new Bar; > Foo.forwardVirtualCall(b); > } > > Will print "Bar". If "resolveVirtualCall" is not used and "bar" is used > directly instead, it will print "Foo". > > -- > /Jacob Carlborg
-- Bye, Gor Gyolchanyan.