C++反照机制

C++反射机制
代码如下:



class Base
{
public:
Base(){}
virtual ~Base(){}
virtual void Display() {}
};




#ifndef REFLEX_H
#define REFLEX_H

#include <iostream>
#include <string>
#include <map>

#include "Base.h"

using namespace std;

#define DEFINE_CLASS(class_name) \
char NameArray[]=#class_name;\
class class_name : public Register<class_name,NameArray>

#define DEFINE_CLASS_EX(class_name,father_class) \
char NameArray[]=#class_name;\
class class_name : public Register<class_name,NameArray>,public father_class

typedef void* (*CreateFuntion)(void);

class ClassFactory
{
public:
static void* GetClassByName(std::string name);
static void RegistClass(std::string name,CreateFuntion method); 
private:
static std::map<std::string,CreateFuntion> m_clsMap;
};

class RegistyClass
{
public:
RegistyClass(std::string name,CreateFuntion method);
};

/*基类*/
template<class T,const char name[]>
class Register
{
public:
Register();
static void* CreateInstance();
public:
static const RegistyClass rc;
};

#endif




#include "reflex.h"

std::map<std::string,CreateFuntion>  ClassFactory::m_clsMap;  

void* ClassFactory::GetClassByName(std::string name)
{
  std::map<std::string,CreateFuntion>::const_iterator find;
  find = m_clsMap.find(name);
  if(find == m_clsMap.end())
  {
      return NULL;
  }
  else
  {
      return find->second();
  }
}

void ClassFactory::RegistClass(std::string name,CreateFuntion method)
{
m_clsMap.insert(std::make_pair(name,method));
}

RegistyClass::RegistyClass(std::string name,CreateFuntion method)
{
ClassFactory::RegistClass(name,method);
}

template<class T,const char name[]>
Register<T,name>::Register()
{
const RegistyClass tmp = rc;
}

template<class T,const char name[]>
void* Register<T,name>::CreateInstance()
{
return new T;
}

template<class T,const char name[]>
const RegistyClass Register<T,name>::rc(name,Register<T,name>::CreateInstance);




#include "reflex.h"

DEFINE_CLASS_EX(CG,Base)
{
public:
 void Display()
 {
    printf("fff\n");
 }
};

int main()
{
  Base* tmp = (Base*)ClassFactory::GetClassByName("CG");
  tmp->Display();
  return 0;
}



这个反射机制,我也是从网上看到的,
http://blog.****.net/wrq147/article/details/5603262,
但就是不明白,为什么不支持继承啊?!!!

------解决方案--------------------
c++执行期间的反射能力接近零,顶多只能模拟一个