我正在使用一个用C ++编写的大型项目(摩西,smt翻译)。情况是它将初始设置存储在名为“StaticData”的非静态类中,静态字段为“instance”(StaticData.h)。任何其他类使用“StaticData.GetInstance()”来访问当前的smt模型设置。现在的问题是:如果使用最少的代码更改,使用多个(至少两个)“StaticData”类实例会怎么做?可能有办法隔离在C#中执行类似AppDomain的部分代码吗?
答案 0 :(得分:0)
怎么样:
#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;
}