🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Registerable base template

Started by
2 comments, last by gilad_novik 18 years ago
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 ---
Advertisement
Shouldn't it be

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));}


??
yup :)
Don't forget to add a default constructor to initialize the reference count to 1.

This topic is closed to new replies.

Advertisement