C++中同一进程中静态类的多个实例

Multiple instances of static class in same process in C++

本文关键字:实例 进程 C++ 静态类      更新时间:2023-10-16

我正在处理一个用C++写的庞大项目(摩西,smt翻译)。情况是它将初始设置存储在名为"StaticData"的非静态类中,并带有静态字段"实例"(StaticData.h)。任何其他类都使用"StaticData.GetInstance()"来访问当前的 smt 模型设置。现在的问题是:你会怎么做才能使用多个(至少两个)"StaticData"类的实例,同时进行最少的代码更改?可能有什么方法可以隔离部分代码,如 C# 中的 AppDomain 执行?

怎么样:

#include <unordered_map>
#include <memory>
using namespace std;
class StaticData {
public:
   static StaticData* CreateState(unsigned int id) {
      static unordered_map<unsigned int, unique_ptr<StaticData> > states;
      auto i = states.find(id);
      if (i != states.end()) {
     return i->second.get(); 
      } else {
     states.insert(make_pair<unsigned int, unique_ptr<StaticData> >(
              static_cast<unsigned int>(id), unique_ptr<StaticData>(new StaticData())));
     return CreateState(id);
      }
   }
private:
   StaticData()
   {
   }
};
int main() {
   StaticData* s = StaticData::CreateState(123);
   StaticData* s2 = StaticData::CreateState(124);
   StaticData* s3 = StaticData::CreateState(123);
   if (s != s3) {
      return 1;
   }
   return 0;
}