我可以沙盒一个使用静态数据的命名空间吗

Can I sandbox a namespace that uses static data?

本文关键字:静态 数据 命名空间 一个 我可以      更新时间:2023-10-16

假设我在namespace foo中有(相当大的)C++模块,它有很多(嗯,至少有一个)静态数据、命名空间全局数据和Singleton等等,分布在无数的文件和目录中。有没有任何方法可以"沙盒"整个事情,以便在同一时间(即在同一过程中)运行独立的版本。要运行的版本数量将在运行时决定。

我曾想过将所有内容封装在几个名称空间中(例如bar1::foobar2::foo…),但这是a)不可能的,因为我不想接触所有文件,b)这不允许我在运行时使用任意数字。


更新:我想也许我可以为每个版本创建单独的线程,但我不太熟悉线程。

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

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

基本上你已经创建了一个带有state的命名空间,这很糟糕,如果你想在这个用例中使用一个类,你应该能够很容易地更改它,使其成为一个类

那么你在哪里有

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

你需要

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