跨编译单元的全局对象初始化顺序无法保证,也无法在main之前判断另一个编译单元中的全局对象是否已经被初始化,但是c++中的local static变量是可以确定在函数执行前确定其初始化的,因此在部分情况中可以使用local static来替代全局变量或辅助全局变量,以下是一个类工厂的代码,用到了此技巧: std::map<std::string, CreateFunction>* ClassFactory::__clsMap; void* ClassFactory::make(const char* name, const char* param) { std::map<std::string,CreateFunction>::const_iterator it = __clsMap->find(name); if(it == __clsMap->end()) return NULL; else { return (it->second(param)); } } void ClassFactory::registerClass(const char* name,CreateFunction method) { static std::map<std::string, CreateFunction> clsMap; clsMap.insert(std::make_pair(name, method)); __clsMap = &clsMap; } |
|