C++中同一进程中静态类的多个实例
Multiple instances of static class in same process in C++
我正在处理一个用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;
}
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- boost::进程间消息队列引发错误
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- IPC使用多个管道和分支进程来运行Python程序
- 从 c++ 中的实例化进程获取输出的可靠方法是什么?
- 类的实例是否仍在同一进程内的线程之间共享相同的静态成员
- C++中同一进程中静态类的多个实例
- 使用 c++/WinAPI 计算 Windows 上运行的进程实例的可靠方法
- 检测Mac OS X中的进程实例
- 获取当前进程中的所有JavaVM*实例
- 同一实例的停靠图标两次,非 GUI 进程错误地标记"not responding"
- 隔离和多次实例化进程中的C库