class B: A
{
    void foo()
    {
        writeln("B.foo called");
    }
}

void main()
{
   auto a = new A();
   auto fn = &a.foo;
   auto ptr = fn.funcptr;
   auto b = new B();
   (cast(void function(A))ptr)(b);
}

will this work?

On Thu, May 3, 2012 at 10:54 PM, Alex Rønne Petersen
<xtzgzo...@gmail.com> wrote:
> On 03-05-2012 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.
>>
>
> import std.stdio;
>
> class A
> {
>    void foo()
>    {
>        writeln("foo called");
>    }
> }
>
> void main()
> {
>    auto a = new A();
>    auto fn = &a.foo;
>    auto ptr = fn.funcptr;
>    (cast(void function(A))ptr)(a);
> }
>
> Prints "foo called".
>
> --
> - Alex



-- 
Bye,
Gor Gyolchanyan.

Reply via email to