🎉 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
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