C++ 反射机制的简单实现

简介: C++并不支持反射机制,只能自己实现。如果需要实现字字符串到函数到映射,一定要使用到函数指针。简单实现反射机制,根据字符串来构造相应到类。主要有以下几点:(1) 可以使用map保存字符从到函数指针到映射。

C++并不支持反射机制,只能自己实现。

如果需要实现字字符串到函数到映射,一定要使用到函数指针

简单实现反射机制,根据字符串来构造相应到类。主要有以下几点:

(1) 可以使用map保存字符从到函数指针到映射。

(2) 工厂类提供字符串与函数指针到注册关系。

(3) 工厂模式根据不同到字符串构造不同到类对象。

 

代码示例:

class_factory.h

 1 #ifndef __CLASSFACTORY_
 2 #define __CLASSFACTORY_
 3 
 4 #include <iostream>
 5 #include<string>
 6 #include<map>
 7 
 8 //定义函数指针
 9 typedef void* (*create_fun)();
10 
11 class ClassFactory{
12 public:
13     ~ClassFactory() {}; 
14 
15     //根据类注册时的名字, 创建类实例, 并返回
16     void* getClassByName(std::string name){
17         std::map<std::string, create_fun>::iterator it = my_map.find(name);
18         if (it == my_map.end()) { return NULL; }
19 
20         create_fun fun = it->second;
21         if (!fun) { return NULL; }
22 
23         return fun();
24     }   
25 
26     //注册类名称与指针函数到映射关系
27     void registClass(std::string name, create_fun fun){
28         my_map[name] = fun;
29     }   
30 
31     //单例模式
32     static ClassFactory& getInstance(){
33         static ClassFactory fac;
34         return fac;
35     }   
36 
37 private:
38     ClassFactory() {};  //私有
39     std::map<std::string, create_fun> my_map;
40 }; 
41 
42 #endif

 test.h

 1 #ifndef __TEST_H
 2 #define __TEST_H
 3 
 4 #include <iostream>
 5 
 6 class Test{
 7 public:
 8     Test(){ std::cout << "call Test Constructor fun" << std::endl; }
 9     ~Test(){ std::cout << "call Test Destructor fun" << std::endl; }
10     void print(){ std::cout << "call Test print fun" << std::endl; }
11 };
12 
13 void* create_Test(){
14     Test *t = new Test;
15     return (t == NULL)? NULL:t;
16 }
17 
18 #endif

main.cpp

 1 #include "test.h"
 2 #include "class_factory.h"
 3 
 4 int main(){
 5     //注册
 6     ClassFactory::getInstance().registClass("Test", create_Test);
 7 
 8     //获取类对象
 9     Test *t = (Test*)ClassFactory::getInstance().getClassByName("Test");
10     if (!t){
11         std::cout << "get instnce Test err;" << std::endl;
12         return 1;
13     }   
14     
15     t->print();
16     delete t;
17     return 0;
18 }

 

相关文章
|
设计模式 算法 测试技术
C++ 创建兼容多个IPC机制的上层接口
C++ 创建兼容多个IPC机制的上层接口
208 1
|
安全 算法 程序员
【C/C++ 文件操作】深入理解C语言中的文件锁定机制
【C/C++ 文件操作】深入理解C语言中的文件锁定机制
373 0
|
安全 算法 C++
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误(三)
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误
279 0
|
5月前
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
110 2
|
8月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
114 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
安全 C++
C++中的异常处理与错误处理机制
C++中的异常处理与错误处理机制
213 0
|
11月前
|
存储 安全 编译器
【c++】深入理解别名机制--引用
本文介绍了C++中的引用概念及其定义、特性、实用性和与指针的区别。引用是C++中的一种别名机制,通过引用可以实现类似于指针的功能,但更安全、简洁。文章详细解释了引用的定义方式、引用传参和返回值的应用场景,以及常引用的使用方法。最后,对比了引用和指针的异同,强调了引用在编程中的重要性和优势。
110 1
|
12月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
163 6
|
12月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
228 7
|
存储 C++
C++ 栈和堆的作用机制,及特点区别
在介绍C++中的十分重要的动态内存管理机制之前,有必要先单独来介绍一下C++中的两个概念,分别是栈和堆。
149 2