c++ - 构建具有强制限制的操作系统层?

标签 c++ cross-platform

我正在尝试在项目中构建操作系统层,以便为其他源代码提供独立于操作系统的功能。例如,我可能有 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

现在,这不适合我。主要原因是理论上我们想要定义一组独立于操作系统的函数,并且在每个系统上都有完全相同的函数集,只是实现不同。

是否可以通过任何编程模式强制执行这种严格的关系?即,规则说“每个 os 实现都必须实现这组功能,不多也不少”。

编辑:让我澄清一下,我是在问如何通过设计/编程模式来加强这种关系,而不是为了链接到其他独立于操作系统的库。

最佳答案

如果你想强制执行某些东西,那么创建一个名为“IOsInterface”(或类似的)的接口(interface)类来描述所需的接口(interface)。任何实际的操作系统实现都必须履行此契约(Contract),即。继承自接口(interface)类并实现所有虚方法。

class IOsInterface
{
    public:
        virtual ~IOsInterface() {}
        virtual void * calloc() = 0;
};


class OsWindowsImpl : public IOsInterface
{
    public:
        virtual void * calloc()
        {
            //Windows implementation
        }
};

创建单个实例(Singleton,您不能执行静态虚拟)并将其用作使用 OS 方法的功能的编程接口(interface)。

在使用本地开发的独立于操作系统的层(Windows、Linux、Solaris Sparc、Solaris X86 以及各自的 32 位和 64 位实现)之后,请非常仔细地考虑您正在做的事情。 . :-) Boost、QT、APR,所有这些都是非常可行的选择。我认为,只有贵公司有严格的政策,所有内容都必须在内部创建,这才是一个好主意。

关于c++ - 构建具有强制限制的操作系统层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8161783/

相关文章:

c++ - 仅在 MFC 菜单栏上禁用自定义

c++ - 是否有跨平台的方法来列出可用的串行端口?

c++ - createButton OpenCV 新 Qt 功能

C++ 复制构造函数清除 Derived* 的 vector<Base*>

c++ - 如何在可移植代码中验证 Microsoft 可移植可执行格式的数字签名?

android - 跨移动平台编程

c++ - 不使用指针的链表实现是否可行?

c - 如何仅在使用 CMake 构建的 Linux 上使用特定于 Linux 的 API 和库?

c++ - 如何用CMake交叉编译qt应用

c++ - 英特尔 GPU、VBO 问题和 SFML