C++实现反射(三)

新博客链接

上一篇我们用一个 Object 类,让所有需要反射的类都继承这个对象,这样虽然解决了问题,但是用起来不太方便。Object 类的存在主要为了解决保存和返回时的类型问题,如果取消这个类,我们怎么对这些反射类做统一处理呢?答案当然是模板。

  1. 实现一个模板类管理类名和类构造函数的映射关系,并提供构造对象的接口,每个基类需要初始化一个这样的管理对象。
  2. 提供一个对应的 static 模板函数,用来保存和返回对应的管理对象。
  3. 使用模板函数和 new 操作符作为每个类的构造函数。
  4. 实现一个简单的 helper 模板类提供作为注册的简单封装,并封装宏实现注册。
  5. 封装一个宏实现反射类的创建。
#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&
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值