反射也就是运行时加载探知使用编译期完全未知的类,具体表现在通过类名称,使用类,在java和很多脚本语言中都支持,但在c++中不支持
而在c++中有RTTI功能与之类似
不过为了理解反射依然通过宏定义,实现了一个反射机制
„
需要一个工厂类和一个全局map和一个基类
主体代码部分参考了网上资料
base.cpp
#include "base.h"
#include <map>
#include <iostream>
static std::map< string,ClassInfo*> *classInfoMap = NULL;
using namespace std;
IMPLEMENT_CLASS(Object)
bool Object::Register(ClassInfo* ci)
{
if(!classInfoMap)
{
classInfoMap = new std::map< string,ClassInfo*>();
}
if(ci)
{
if(classInfoMap->find(ci->m_className) == classInfoMap->end())
{
cout<<"Register:"<<ci->m_className<<endl;
classInfoMap->insert(std::map< string,ClassInfo*>::value_type(ci->m_className,ci));
}
}
return true;
}
Object* Object::CreateObject(std::string n