我可以沙箱使用静态数据的命名空间吗?

时间:2012-03-13 00:24:18

标签: c++ static singleton extensibility

假设我在namespace foo中有(非常大的)C ++模块,它有很多(好的,至少一个)静态数据,名称空间全局数据和单身人士等等,分布在无数的文件中和目录。有没有办法“沙盒化”整个东西,以便同时运行独立版本(在同一个过程中,即)。将在运行时决定运行多少个版本。

我考虑将所有内容包装在多个名称空间中(例如bar1::foobar2::foo,...),但这是a)不可能,因为我不想触及所有文件和b )它不会使我在运行时拥有任意数字。


更新:我想也许我可以为每个版本创建单独的线程,但我不是那么精通线程。

2 个答案:

答案 0 :(得分:2)

考虑将您的foo代码放在共享对象中。在运行时,您可以根据需要随时加载和卸载该共享对象。

有关动态加载共享对象的初始参考,请查看http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

答案 1 :(得分:0)

基本上你已经创建了一个带状态的命名空间,这很糟糕,你想为这个用例使用一个类,你应该能够合理地轻松地改变它,这样它就是一个类

所以你在哪里

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

foo::func();

你需要

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

foo foo1;
foo1.func();