Registerable base template
Greetings, Here is a registerable base class for your classes. Just add your error checking code to Register function and you are good to go // --- CUT HERE ---- template <class T> class registerable { private : int referenceCount; public : static void ctor(T *thisPtr) { new(thisPtr) T(); } static void dtor(T *thisPtr) { thisPtr->~T(); } void AddRef() { referenceCount++; } void Release() { if (--referenceCount == 0) delete this; } static void Register(asIScriptEngine *ipr, const char *typeName) { ipr->RegisterObjectType(typeName, sizeof(T), asOBJ_CLASS); ipr->RegisterObjectBehaviour(typeName, asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(registerable::ctor), asCALL_CDECL_OBJLAST); ipr->RegisterObjectBehaviour(typeName, asBEHAVE_DESTRUCT, "void f()", asFUNCTION(registerable::dtor), asCALL_CDECL_OBJLAST); ipr->RegisterObjectBehaviour(typeName, asBEHAVE_ADDREF, "void f()", asMETHOD(registerable, AddRef), asCALL_THISCALL); ipr->RegisterObjectBehaviour(typeName, asBEHAVE_RELEASE, "void f()", asMETHOD(registerable, Release), asCALL_THISCALL); } }; --- CUT HERE --- And here is an axample. --- CUT HERE --- class myClass : public registerable<MyClass> { int varAlpha; int varBeta; static void Register(asIScriptEngine *ipr, const char *typeName) { ipr->RegisterObjectProperty(typeName, "int varAlpha", offsetof(myClass, myClass::varAlpha)); ipr->RegisterObjectProperty(typeName, "int varBeta", offsetof(myClass, myClass::varBeta)); } } void registerThings(asIScriptEngine *ipr) { myClass::Register(ipr, "myClass"); } --- CUT HERE ---
Shouldn't it be
class MyClass : public registerable<MyClass>
and
??
class MyClass : public registerable<MyClass>
and
static void Register(asIScriptEngine *ipr, const char *typeName) {registerable::Register(ipr, typeName); // <<ipr->RegisterObjectProperty(typeName, "int varAlpha", offsetof(myClass, myClass::varAlpha));ipr->RegisterObjectProperty(typeName, "int varBeta", offsetof(myClass, myClass::varBeta));}
??
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement