Могу ли я изолировать пространство имен, которое использует статические данные? - PullRequest
2 голосов
/ 13 марта 2012

Скажем, у меня есть (довольно большой) модуль C ++ в namespace foo, который имеет много (ну, по крайней мере, один) статических данных, глобальных данных пространства имен и синглетонов и так далее, распределенных по множеству файлов и каталогов,Есть ли способ «песочницы» всей этой вещи для запуска независимых версий в то же время (в том же процессе, то есть).Сколько версий должно быть запущено, будет решено во время выполнения.

Я думал о переносе всего в несколько пространств имен (например, bar1::foo, bar2::foo, ...), но это а) невозможно,так как я не хочу касаться всех файлов и б) это не позволило бы мне иметь произвольное число во время выполнения.


Обновление: я думал, что, возможно, я мог бы создать отдельный поток для каждой версии,но я не очень хорошо разбираюсь в темах.

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Подумайте о том, чтобы поместить свой код foo в общий объект.Во время выполнения вы можете загружать и выгружать этот общий объект столько раз, сколько пожелаете.

Для начальной ссылки на динамическую загрузку общего объекта взгляните на http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

0 голосов
/ 13 марта 2012

В основном вы создали пространство имен с состоянием, это плохо, вы хотите использовать класс для этого случая использования, вы должны иметь возможность достаточно легко изменить его, чтобы он стал классом

Так, где у вас было

namespace foo{
    int state;
    int func();
}

foo::func();

вам нужно

class foo{
    int state;
    int func();
};

foo foo1;
foo1.func();
...