Я работаю с огромным проектом, написанным на C++ (moses, smt translation). Ситуация заключается в том, что она хранит начальные настройки в нестатическом классе под названием «StaticData» со статическим полем «экземпляр» (StaticData.h). Любой другой класс использует «StaticData.GetInstance()» для доступа к текущим параметрам модели smt. Теперь возникает вопрос: что бы вы сделали, чтобы использовать несколько (по крайней мере двух) экземпляров класса StaticData с минимальным изменением кода? Может быть, есть какой-либо способ изолировать часть кода, выполняемую как AppDomain в C#?Несколько экземпляров статического класса в одном процессе в C++
0
A
ответ
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;
}
+0
Проблема в том, что существуют десятки других классов, использует StaticData.GetInstance - я не могу их исправить. –
+0
Простое изменение: 'GetInstance() {return CreateState (1); } ' –
Смежные вопросы
- 1. Несколько экземпляров NServiceBus в одном процессе?
- 2. несколько приложений в одном процессе
- 3. Почему несколько экземпляров статического класса создаются?
- 4. Может ли CasperJS запускать несколько экземпляров в одном процессе?
- 5. Как создать несколько экземпляров класса в C++
- 6. Как запустить несколько экземпляров exe appln, используя потоки в одном процессе в C#?
- 7. Создание экземпляров статического вложенного класса в этом
- 8. Несколько вопросов статического класса
- 9. C++ несколько экземпляров статических членов
- 10. Несколько входных очередей в одном процессе ресуса
- 11. Несколько log4cxx Dom Configurator в одном процессе
- 12. Сколько экземпляров веб-приложения работает в одном рабочем процессе?
- 13. несколько экземпляров одноэлементного класса
- 14. SQL Несколько экземпляров подсчета в одном запросе
- 15. Создайте несколько экземпляров класса
- 16. Что происходит, когда создаются несколько экземпляров статического класса?
- 17. Invoke несколько экземпляров класса
- 18. Несколько экземпляров класса
- 19. Несколько экземпляров JS класса
- 20. Несколько экземпляров Log4PHP в одном месте
- 21. AS3 Несколько имен экземпляров в одном MC
- 22. несколько экземпляров django в одном домене
- 23. Использование статического класса в C#
- 24. Использование статического класса в C++
- 25. Java - Использование класса экземпляров из статического метода?
- 26. назначить несколько экземпляров класса переменным
- 27. тупик в одном процессе -?
- 28. Сколько экземпляров статического класса мы можем создать?
- 29. Инициализация статического класса в Java
- 30. Несколько экземпляров dll в C++
Похоже 'StaticData' класс синглтон. –
Поздравляем! Вы обнаружили, почему одиночные игры плохие. –
@JohnDibling, да. В этот момент единственный способ загрузить и использовать две модели (означает два экземпляра StaticData) - запустить два процесса. И я ищу способ сделать это в рамках одного процесса. –