上一篇我们用一个 Object 类,让所有需要反射的类都继承这个对象,这样虽然解决了问题,但是用起来不太方便。Object 类的存在主要为了解决保存和返回时的类型问题,如果取消这个类,我们怎么对这些反射类做统一处理呢?答案当然是模板。
- 实现一个模板类管理类名和类构造函数的映射关系,并提供构造对象的接口,每个基类需要初始化一个这样的管理对象。
- 提供一个对应的 static 模板函数,用来保存和返回对应的管理对象。
- 使用模板函数和 new 操作符作为每个类的构造函数。
- 实现一个简单的 helper 模板类提供作为注册的简单封装,并封装宏实现注册。
- 封装一个宏实现反射类的创建。
#ifndef __BASE_H__
#define __BASE_H__
#include <string>
#include <map>
#include <iostream>
// 使用模板,每个基类单独生成一个 ClassRegister
// 好处是需要反射的类不需要去继承 Object 对象
// ClassRegister 用来管理类名->类构造函数的映射,对外提供根据类名构造对象对函数
template<typename ClassName>
class ClassRegister {
public:
typedef ClassName* (*Constructor)(void);
private:
typedef std::map<std::string, Constructor&
版权声明:本文为jcjc918原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。