我正在处理一个用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;
}