构建具有强制限制的操作系统层
Building an OS Layer with enforced restrictions?
我试图在一个项目中构建一个操作系统层,为其他源代码提供与操作系统无关的功能。例如,我可能有像os_calloc、os_free等函数。我不认为这些是非常依赖于操作系统的,但请随意考虑更好的例子。
目前我们的系统是这样设置的:
#ifdef WINDOWS
void * os_calloc(){
//Windows implementation
}
void * os_free(){
//Windows implementation
}
#endif
#ifdef LINUX
void * os_calloc(){
//Linux implementation
}
void * os_free(){
//Linuximplementation
}
#endif
现在,这对我来说不太合适。主要原因是,理论上我们想要定义一组与操作系统无关的函数,并且在每个系统上都有完全相同的函数集,只是实现不同。
这种严格关系可以通过任何编程模式强制执行吗?也就是说,规则说"每个操作系统实现必须实现这组函数,不多不少"。
编辑:让我澄清一下,我问的是如何通过设计/编程模式来实现这种关系,而不是通过链接到其他独立于操作系统的库。
如果你想执行一些东西,那么创建一个名为"IOsInterface"(或类似的)的接口类来描述所需的接口。任何实际的操作系统实现都必须履行这个契约。继承接口类并实现所有虚方法。
class IOsInterface
{
public:
virtual ~IOsInterface() {}
virtual void * calloc() = 0;
};
class OsWindowsImpl : public IOsInterface
{
public:
virtual void * calloc()
{
//Windows implementation
}
};
创建一个实例(Singleton,你不能做静态虚拟),并使用它作为使用操作系统方法的功能的编程接口。
使用了本地的os独立层(Windows, Linux, Solaris Sparc, Solaris X86,以及每个层的32位和64位实现),但是,请仔细考虑您正在做的事情…Boost, QT, APR,所有这些都是非常可行的选择。我认为,只有当你的公司有严格的政策,所有的东西都必须在内部创建时,这才是一个好主意。
已经有c++库提供了这个功能。例如Qt的QtCore部分
是的,它可以这样工作。但是为什么要发明轮子呢?这就是Apache可移植运行时所做的。(该网站似乎正在关闭。)APR提供的一些与操作系统无关的东西(来自维基百科):
- 内存分配和内存池功能 原子操作
- 动态库处理
- 文件I/O
- 命令参数解析
- 哈希表和数组 <
- Mmap功能/gh>
- 网络套接字和协议
- 线程、进程和互斥锁功能 共享内存功能<
- 时间例程/gh>
- 用户和组ID业务
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- 如何构建与操作系统隔离的节点插件api
- 如何在 Android Studio 中构建本地/主机操作系统C++单元测试?
- C++ 基于 WIN64 构建的 ADO 在 win32 操作系统上不起作用
- ICU ustdio.h函数:使用CMake构建时,在Mac操作系统上使用未定义的符号
- 在提升构建中根据操作系统选择编译器选项
- 确定用于在*ix操作系统上构建共享对象的编译器和版本
- 构建具有强制限制的操作系统层
- 用哪个操作系统来构建XP和Win7
- 如何使用Visual C++编译器在Windows上构建库时正确设置目标操作系统版本
- 在 CentOS 6.x 64 位操作系统中构建C++项目时出错