Hello Matt, thanks for your fast input.

Matt Emson wrote:

Any idea how I know if a class, in a class pointer, overrides a virtual
method? Eg:

<snip>

vfooclass := tboo1;
// vfooclass doesn't implement sample.

vfooclass := tboo2;
// vfooclass implements sample.

You need to implement a virtual method, even if it does nothing. Are you
sure you're not meaning abstract method?

No, no... I just want to know if the class referenced by vfooclass overrides the "sample" method, implementing something different from the virtual implementation that, btw, isn't abstract and it's empty.

At this moment I know that:

1. I could cast a method pointer with tmethod if sample was a class
method;
2. I could cast this same method pointer if I had an instance of
vfooclass.
But is there another way beyond creating an instance?

You can always hack the RTTI/VMT, but that might not be a safe way.

I though about this, dunno it's better than creating an useless instance.

Might it be that you need to have a more complex inheritence tree? So add a
few levels?

Even more complex? No, no! =)

This is a piece of an OPF framework. I want to know if a business class implement something in a virtual method. Such class belongs to the application and the framework doesn't have direct access to it. If the class doesn't implement I don't need to retrieve an instance from the database, btw an expensive task for absolutely nothing.

So, at this moment I know that I can:

1. Use a safe, magic and efficient way, but I need to know if it exists;
2. Create a "light" instance using vfooclass.NewInstance method;
3. hack the vmt.

Which approach do you use?

Thanks.

--
Joao Morais

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to