C++实现反射机制
来源:互联网 发布:手机网络测试软件 编辑:程序博客网 时间:2024/06/17 20:43
#define DECLARE_CLASS_CREATE(class_name) \ static CObject* CreateClass## class_name (); #define IMPL_CLASS_CREATE(class_name) \ static CObject* CreateClass## class_name (){ \ return new class_name; \ }; #define REG_CLASS_CREATE(class_name) \ RegisterFactoryCreate(class_name::CreateClass## class_name, #class_name);
C++并不支持反射机制,只能自己实现。
如果需要实现字字符串到函数到映射,一定要使用到函数指针。
简单实现反射机制,根据字符串来构造相应到类。主要有以下几点:
(1) 可以使用map保存字符从到函数指针到映射。
(2) 工厂类提供字符串与函数指针到注册关系。
(3) 工厂模式根据不同到字符串构造不同到类对象。
#ifndef __CLASSFACTORY_#define __CLASSFACTORY_#include <iostream>#include<string>#include<map>//定义函数指针typedef void* (*create_fun)();class ClassFactory{public: ~ClassFactory() {}; //根据类注册时的名字, 创建类实例, 并返回 void* getClassByName(std::string name){ std::map<std::string, create_fun>::iterator it = my_map.find(name); if (it == my_map.end()) { return NULL; } create_fun fun = it->second; if (!fun) { return NULL; } return fun(); } //注册类名称与指针函数到映射关系 void registClass(std::string name, create_fun fun){ my_map[name] = fun; } //单例模式 static ClassFactory& getInstance(){ static ClassFactory fac; return fac; } private: ClassFactory() {}; //私有 std::map<std::string, create_fun> my_map;}; #endif#ifndef __TEST_H#define __TEST_H#include <iostream>class Test{public: Test(){ std::cout << "call Test Constructor fun" << std::endl; } ~Test(){ std::cout << "call Test Destructor fun" << std::endl; } void print(){ std::cout << "call Test print fun" << std::endl; }};void* create_Test(){ Test *t = new Test; return (t == NULL)? NULL:t;}#endif#include "test.h"#include "class_factory.h"int main(){ //注册 ClassFactory::getInstance().registClass("Test", create_Test); //获取类对象 Test *t = (Test*)ClassFactory::getInstance().getClassByName("Test"); if (!t){ std::cout << "get instnce Test err;" << std::endl; return 1; } t->print(); delete t; return 0;}
阅读全文
0 0
- c 结构体反射机制实现
- 【Object C】 反射机制
- Objective-C反射机制
- 【C#】:浅谈反射机制
- Object-c反射机制
- 【C#】反射机制
- java利用反射实现Object-c中的KVC机制
- 反射机制的实现
- JavaScript 实现反射机制
- iOS实现反射机制
- iOS实现反射机制
- C++实现反射机制
- C++实现反射机制
- C++实现反射机制
- c++实现反射机制
- C++ 实现反射机制
- C++实现反射机制
- C++ 实现反射机制
- Redis之Hash类型操作
- 强化学习之Actor Critic
- <转载>借助 Docker 企业版大幅节省 IT 预算
- 脉冲边沿检测的亚稳态处理
- Java -- 集合Map
- C++实现反射机制
- 二叉树各种计算公式总结
- Redis之List类型操作
- 比特币区块链
- android 设备写入文件,立即断电重启后,文件丢失
- 同一个单片机系统要做到共地
- 关于mysql读取文件整改意见
- java中的this关键字与final关键字的用法总结
- 561. Array Partition I; Difficulty : Easy