我可以沙盒一个使用静态数据的命名空间吗
Can I sandbox a namespace that uses static data?
假设我在namespace foo
中有(相当大的)C++模块,它有很多(嗯,至少有一个)静态数据、命名空间全局数据和Singleton等等,分布在无数的文件和目录中。有没有任何方法可以"沙盒"整个事情,以便在同一时间(即在同一过程中)运行独立的版本。要运行的版本数量将在运行时决定。
我曾想过将所有内容封装在几个名称空间中(例如bar1::foo
、bar2::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();
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 静态数据成员模板专用化的实例化点在哪里
- 内联静态数据的初始化
- 调用在 HXX 文件中声明的静态数据成员
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- 何时需要定义类的静态数据成员 (un/-)
- 为什么静态数据成员不能在c++11中的类中初始化
- 访问模板化类的非模板基的静态数据
- 静态数据成员的模板专用化
- 拒绝包含某些公共静态数据成员的类型
- GCC:在调试构建中优化的静态数据成员
- 类模板静态数据成员定义/声明/初始化
- 是否允许在作为静态数据结构成员的lambda函数中捕获变量
- C++ 中的静态数据成员
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 使用 lambda 函数初始化静态数据成员
- 引用静态数据成员
- 学习C++并在早期示例中遇到错误(在非静态数据成员之前需要构造函数)