ZFFramework
 
Loading...
Searching...
No Matches
ZFClassDynamicRegister.h File Reference

dynamic register a ZFClass More...

#include "ZFClass.h"

Go to the source code of this file.

Macros

#define ZFCLASS_EXTEND(ExistClass, AttachClass)
 advanced dynamic implement
 
#define ZFCLASS_EXTEND_DETAIL(ExistClass, AttachClass, regSig)
 ZFCLASS_EXTEND with custom regSig
 

Functions

const ZFClassZFClassDynamicRegister (const zfstring &classNameFull, const ZFClass *parent=zft_zfnull, ZFObject *classDynamicRegisterUserData=zft_zfnull, zfstring *errorHint=zft_zfnull)
 dynamic register a class
 
void ZFClassDynamicUnregister (const ZFClass *cls)
 unregister class that registered by ZFClassDynamicRegister
 
zfbool ZFImplementDynamicRegister (const ZFClass *cls, const ZFClass *clsToImplement)
 see ZFCLASS_EXTEND
 
void ZFImplementDynamicUnregister (const ZFClass *cls, const ZFClass *clsToImplement)
 see ZFCLASS_EXTEND
 

Detailed Description

dynamic register a ZFClass

Macro Definition Documentation

◆ ZFCLASS_EXTEND

#define ZFCLASS_EXTEND ( ExistClass,
AttachClass )

advanced dynamic implement

usage:

zfclass ExistClass : zfextend ZFObject {...};
zfclass AttachClass : zfextend ZFObject {...};
// register
// ZFImplementDynamicRegister(ExistClass::ClassData(), AttachClass::ClassData());
// or use the util macro for short
ZFCLASS_EXTEND(ExistClass, AttachClass)
// create object
// access as AttachClass
AttachClass *p = obj; // OK
// call AttachClass's method
obj->invoke("methodInAttachClass"); // OK
#define ZFCLASS_EXTEND(ExistClass, AttachClass)
advanced dynamic implement
Definition ZFClassDynamicRegister.h:74
#define zfextend
dummy macro shows class inherit from another
Definition ZFCoreTypeDef_ClassType.h:53
#define zfclass
same as class, shows that this class is a ZFObject type
Definition ZFObjectClassTypeFwd.h:38
base class of all objects
Definition ZFObjectCore.h:209
util class to alloc and hold ZFObject type
Definition ZFObjectAutoPtr.h:157

this is useful to extend existing class, simplar to category of Object-C

Function Documentation

◆ ZFClassDynamicRegister()

const ZFClass * ZFClassDynamicRegister ( const zfstring & classNameFull,
const ZFClass * parent = zft_zfnull,
ZFObject * classDynamicRegisterUserData = zft_zfnull,
zfstring * errorHint = zft_zfnull )
extern

dynamic register a class

parent class must be object type that can be allocated
return null if parent class not valid or class name already exists

Note
dynamic registered contents would be removed automatically during ZFFrameworkCleanup as level ZFLevelZFFrameworkHigh
it's ensured safe to unregister class even if allocated object instance still exists, at this case ZFObject::classData would return parent class after the class unregistered