在写C++的项目的时候,想做一个模块的注册。
所有的模块信息必须在Registry类中的map注册。全局只有一份map
每次新增一个新的模块 需要登记 如member.h中所示。需要提供一个ID(value中会包含模块信息)
但是实际运行过程中 在member.h注册的时候会遇到registryTable还没有创建的情况。 Regisry.cpp中 并没有去调用Regsitry的构造函数。很是疑惑。
不知道在C++中做这种静态的注册有没有好的管理方式
Registry.h
class Registry {
public:
static Registry *GetRegistry();
void AddNewElement(const void *key, int value) {
registryTable.emplace(std::pair<const void*, int>(key, value));
}
private:
std::map<const void*, int> registryTable
}
Registry.cpp
#include "Registry.h"
Registry *Registry::GetRegistry() {
static Registry g_Registry;
return &g_Registry;
}
member.h
#include "Registry.h"
clase RegisterMember {
RegisterMember (const void* newKey, int newVal) {
Registry::GetRegistry()->AddNewElement(newKey, newVal);
}
}
member.cpp
#include "member.h"
static char AID = 0;
static char BID = 0;
static RegisterMember A(&AID, 0);
static RegisterMember B(&BID, 1);