Main Page   Class Hierarchy   Compound List   File List   Compound Members  

mdynamic.h

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 //    virtual Object*       getinstance ();
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 //    Object* classname::getinstance () {return new classname();}
00029 //  Class   classname::class_##classname (#classname, #bases, (Object& (Object::*)()) (&classname::getinstance));
00030 //  Class   classname::class_##classname (#classname, #bases, (const Object& (Object::*)()) (&classname::getinstance));
00031 
00032 #define impl_abstract(classname,bases) \
00033     Class   classname::class_##classname (#classname, #bases, NULL);\
00034 
00035 //    Object* classname::getinstance () {return NULL;}
00036 //    Object& classname::getinstance () {return (Object&) *NULL;}
00037 //  Class   classname::class_##classname (#classname, #bases, (Object& (Object::*)()) (&classname::getinstance));
00038 //  Class   classname::class_##classname (#classname, #bases, (const Object& (Object::*)() const) (&classname::getinstance));
00039 
00040 #define newobj(classname) \
00041     ((classname*) & ClassLib::getinstance(#classname))
00042 
00043 #define dyncreate(classname) \
00044     (&ClassLib::getinstance(classname))
00045 
00046 //#define getInstance(classname) dyncreate(classname)
00047 
00048         
00049 #endif

Generated at Tue Dec 4 19:53:25 2001 for MagiC++ by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001