virtual method pointer
Jacob Carlborg
doob at me.com
Fri May 4 00:25:11 PDT 2012
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
More information about the Digitalmars-d
mailing list