Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

mdynamic.h

Go to the documentation of this file.
00001 
00025 #ifndef __DYNAMIC_H__
00026 #define __DYNAMIC_H__
00027 
00028 #ifndef BEGIN_NAMESPACE
00029 #define BEGIN_NAMESPACE(ns) namespace ns {
00030 #ifdef QT_VERSION
00031 #define END_NAMESPACE }
00032 #else
00033 #define END_NAMESPACE } using namespace MagiC;
00034 #endif
00035 #endif
00036 
00037 BEGIN_NAMESPACE(MagiC);
00038 
00039 class Object;
00040 
00043 class GetClassInstance {
00044   public:
00045     virtual Object*     getInstance ()=0;
00046 };
00047 
00048 #define CLONEMETHOD(cls) cls* clone () const {return new cls (*this);}
00049 #define decl_clonable(classname) public: CLONEMETHOD (classname) private:
00050 
00055 #define decl_dynamic(classname) \
00056     static Class class_##classname;\
00057   public:\
00058     virtual const Class&    getclass    () const {return class_##classname;}\
00059   protected:
00060 
00061 //    virtual Object*       getinstance ();
00062 
00067 #define impl_dynamic(classname,bases) \
00068     class GetInstance_##classname : public GetClassInstance {\
00069       public: Object* getInstance(){return new classname();}\
00070     };\
00071     Class   classname::class_##classname (#classname, #bases, new GetInstance_##classname());\
00072 
00073 //    Object* classname::getinstance () {return new classname();}
00074 //  Class   classname::class_##classname (#classname, #bases, (Object& (Object::*)()) (&classname::getinstance));
00075 //  Class   classname::class_##classname (#classname, #bases, (const Object& (Object::*)()) (&classname::getinstance));
00076 
00079 #define impl_abstract(classname,bases) \
00080     Class   classname::class_##classname (#classname, #bases, NULL);\
00081 
00082 //    Object* classname::getinstance () {return NULL;}
00083 //    Object& classname::getinstance () {return (Object&) *NULL;}
00084 //  Class   classname::class_##classname (#classname, #bases, (Object& (Object::*)()) (&classname::getinstance));
00085 //  Class   classname::class_##classname (#classname, #bases, (const Object& (Object::*)() const) (&classname::getinstance));
00086 
00089 #define newobj(classname) \
00090     ((classname*) & ClassLib::getinstance(#classname))
00091 
00094 #define dyncreate(classname) \
00095     (&ClassLib::getinstance(classname))
00096 
00097 //#define getInstance(classname) dyncreate(classname)
00098 
00099 
00100 END_NAMESPACE;
00101 
00102 #endif
00103 

Generated on Thu Feb 10 20:06:41 2005 for LibMagiC by doxygen1.2.18