Sign in to follow this  

implicit casting between reference types in script

Recommended Posts

I have the following in C++:

class Base
    void Foo() { ... }

class Derived : public Base

I then bind these types as follows:

RegisterObjectType("Base",     0, asOBJ_REF | asOBJ_NOCOUNT);
RegisterObjectType("Derived",  0, asOBJ_REF | asOBJ_NOCOUNT);

RegisterObjectMethod("Base", "void Foo()", asMETHODPR(Base, Foo, (), void), asCALL_THISCALL);

RegisterObjectBehaviour("Base", asBEHAVE_REF_CAST, "Derived@ f()", asFUNCTION((refCast<Base,Derived>)), asCALL_CDECL_OBJLAST);
RegisterObjectBehaviour("Derived", asBEHAVE_IMPLICIT_REF_CAST, "Base@ f()", asFUNCTION((refCast<Derived,Base>)), asCALL_CDECL_OBJLAST);

Then in script I have the following:

void main(Derived& d)

I expect the registered implicit conversion to apply to 'd' and call (in C++) d.Foo(), which should resolve to Base's Foo(). However, I get the following compilation error:


No matching signatures to 'Derived::Foo()'


Am I doing anything wrong with how I'm registering the implicit cast? Or would it only take effect for assignment/function params/etc and not what I'm trying to do?


Thank you very much.

Edited by iraxef

Share this post

Link to post
Share on other sites
You've registered the ref casts correctly. The problem is as you suspected that the implicit cast is not done in this case.

Instead you need to register the inherited methods in the derived class too.

This is documented here:

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this