C++反射的一种实现方式

主题 C++

一、注册辅助类

ClassRegistry :模板函数,用于data、module、contextdata的注册,其中的函数解析:

create_object :从RegistryMap里找到传入name对应的RegistryNode(RegistryNode保存了名字和构造函数),调用构造函数返回。

register_class :用传入的name和constructor注册RegistryMap,只在Register的构造函数里面调用,后面会在ClassRegister<IData> DataRegister、ClassRegister<IModule> ModuleRegister、ClassRegister<IContextData> ContextDataRegister用到。RegistryMap里面的数据是从register_class这个方法插入数据进去的,后面会在IMPLEMENT_XXX中调用到这个。

fill_name_array :找到RegistryMap里面注册的name,插入传入参数。

二、使用到的宏定义

2.1 data

REGISTER_DATA:声明构造data_class的函数 __construct_##name##_data() ,其中调用了data_calss的构造函数;

声明获取class的get_##name,函数体的get_data从 sign_data_map里面获取到对应的IData

#define REGISTER_DATA(data_class, name)                                       \
  inline ::wmf::IData* __construct_##name##_data() { return new data_class; } \
  namespace wmf {                                                             \
  namespace internal {                                                        \
  inline data_class* get_##name() { return get_data<data_class>(#name); }     \
  }                                                                           \
  }  // wmf::internal

如果有想学习编程的初学者,可来我们的C/C++技术学习扣qun的哦:前面是58,93后面是4,83-89里面免费送整套系统的C/C++教程!IMPLEMENT_DATA:调用DataRegister的构造函数。声明变量__##name##_module_register,这里会将输入的name和构造函数__construct_##name##_data注册到RegistryMap中;

#define IMPLEMENT_DATA(name)                                \
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值