Advertisement

implicit casting between reference types in script

Started by December 16, 2013 07:56 PM
1 comment, last by iraxef 10 years, 11 months ago

I have the following in C++:


class Base
{
public:
    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)
{
  d.Foo();
}

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.

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: http://www.angelcode.com/angelscript/sdk/docs/manual/doc_adv_class_hierarchy.html#doc_adv_class_hierarchy_2

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

Advertisement

Thank you very much - I ended up doing something similar.

This topic is closed to new replies.

Advertisement