主题 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) \