00001 #ifndef __DYNAMIC_H__
00002 #define __DYNAMIC_H__
00003
00004 class Object;
00005
00006 class GetClassInstance {
00007 public:
00008 virtual Object* getInstance ()=0;
00009 };
00010
00011 #define CLONEMETHOD(cls) cls* clone () const {return new cls (*this);}
00012 #define decl_clonable(classname) public: CLONEMETHOD (classname) private:
00013
00014 #define decl_dynamic(classname) \
00015 static Class class_##classname;\
00016 public:\
00017 virtual const Class& getclass () const {return class_##classname;}\
00018 protected:
00019
00020
00021
00022 #define impl_dynamic(classname,bases) \
00023 class GetInstance_##classname : public GetClassInstance {\
00024 public: Object* getInstance(){return new classname();}\
00025 };\
00026 Class classname::class_##classname (#classname, #bases, new GetInstance_##classname());\
00027
00028
00029
00030
00031
00032 #define impl_abstract(classname,bases) \
00033 Class classname::class_##classname (#classname, #bases, NULL);\
00034
00035
00036
00037
00038
00039
00040 #define newobj(classname) \
00041 ((classname*) & ClassLib::getinstance(#classname))
00042
00043 #define dyncreate(classname) \
00044 (&ClassLib::getinstance(classname))
00045
00046
00047
00048
00049 #endif