1. 首页
  2. 编程语言
  3. C
  4. C++反射的一种实现方法详解

C++反射的一种实现方法详解

上传者: 2021-08-11 03:56:33上传 PDF文件 77.31 KB 热度 15次

REGISTER_CONTEXT_DATA:声明__construct_##name##_context_data(),新建data_class;声明获取class的get_##name,函数体里面通过name查找到ContextDataMap保存的名字签名对应的IContextData,转换为data_class返回。IMPLEMENT_CONTEXT_DATA:声明__##name##_context_data变量,这里会将输入的name和构造函数__construct_##name##_context_data注册到RegistryMap中;DECLARE_INDEX_DATA:N for name, VT for VersionIndex 类型。DEFINE_INDEX_DATA:N for name,这里是声明一堆string变量,用于data的path、name、desc。INJECT_MODULE_OBJECT_DEPENDENCY:通过上下文context获取的module_from注入到object_to中。INJECT_DATA_MODULE_DEPENDENCY用于把data注入到module中。在新增module的.h文件最后调用REGISTER_MODULE声明了在IMPLEMENT_MODULE中会用到的构造函数,以及声明了从ModuleMap中获取其对象的get_xxx函数。在service的最后调用IMPLEMENT_MODULE,把module注册到RegistryMap中。在上下文相关的session中调用INJECT_MODULE_DEPENDENCY、INJECT_DATA_MODULE_DEPENDENCY;INJECT_MODULE_DEPENDENCY用于把session相关的信息注入到module中,module的意思是这个请求需要过的模块名。ClassRegistry用于给第二项的一堆宏使用。module于类的映射关键在于RegistryMap,新增一个module的时候,服务会去Reg

用户评论