假设我在namespace foo
中有(非常大的)C ++模块,它有很多(好的,至少一个)静态数据,名称空间全局数据和单身人士等等,分布在无数的文件中和目录。有没有办法“沙盒化”整个东西,以便同时运行独立版本(在同一个过程中,即)。将在运行时决定运行多少个版本。
我考虑将所有内容包装在多个名称空间中(例如bar1::foo
,bar2::foo
,...),但这是a)不可能,因为我不想触及所有文件和b )它不会使我在运行时拥有任意数字。
更新:我想也许我可以为每个版本创建单独的线程,但我不是那么精通线程。
答案 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();