C++实现反射机制
2013-10-30 11:27
423 查看
#include "stdafx.h" #include <cstdio> #include <string> #include <cstring> #include <map> #include <iostream> using namespace std; #define IMPL_CLASS_CREATE(class_name) \ static base* CreateClass##class_name(){ \ return new class_name; \ }; #define DECLARE_CLASS_CREATE(class_name) \ static base* CreateClass##class_name(); class base{ public: base(){} virtual ~base(){} }; class A : public base{ public: A(){std::cout<< "A" << endl;} }; class B : public base{ public: B(){std::cout<< "B" << endl;} }; class C : public base{ public: C(){std::cout<< "C" << endl;} }; IMPL_CLASS_CREATE(A);//声明类的Create函数 IMPL_CLASS_CREATE(B); IMPL_CLASS_CREATE(C);
//定义Create函数指针 typedef base* (*CreateClass)(); #define CREATE_CLASS(_msgCall) (CreateClass)(&_msgCall)
//反射机制中的表 static std::map<std::string, CreateClass> CreateList; class Factory{ public: static void registerClass(std::string var, CreateClass fun) { CreateList[var] = fun; } static base* createByString(std::string var) { return (CreateList.find(var)->second)(); } }; #define REGISTER_CLASS(class_name) \ Factory::registerClass(#class_name, CREATE_CLASS(CreateClass##class_name)) int main() { REGISTER_CLASS(A); REGISTER_CLASS(B); REGISTER_CLASS(C); base* pA = Factory::createByString("A"); base* pB = Factory::createByString("B"); base* pC = Factory::createByString("C"); system("pause"); return 0; }
相关文章推荐
- VC++ 6.0 单步调试【写给自己看的调试总结帖】
- “Hello World!”的N种写法(C语言)
- c++下使用libsvm
- C++派生 虚函数
- C++经典错误之already defined in .obj解决方法之补充
- C语言中数组的宏定义
- JNI——java & c/c++ 相互通信及调用
- C++中::的用法
- C++ 虚函数表解析
- 一个C++开发的即时通软件源码 .
- 一个C++开发的即时通软件源码
- c++ c# map
- 标准C++中的string类的用法总结
- Java中如何实现类似C++结构体的二级排序
- c语言write与python的struct模块交互
- c++调用python解析list返回值
- c++ string 类基本用法样例
- C++中private继承
- 第二遍C++primer->C风格字符串
- C/C++控制台输出时设置字体及背景颜色