使用强制限制构建操作系统层?

时间:2011-11-17 03:34:22

标签: c++ cross-platform

我正在尝试在项目中构建OS层,以便为其他源代码提供与OS无关的功能。例如,我可能有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

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

这种严格的关系可以通过任何编程模式来实施吗?也就是说,规则“每个操作系统实现必须实现这组功能,不能再少了”。

编辑:我只是说清楚我正在问如何通过设计/编程模式强制实现这种关系,而不是链接到其他独立于操作系统的库。

3 个答案:

答案 0 :(得分:1)

已有C ++库提供。例如Qt的QtCore部分

答案 1 :(得分:1)

是的,它可以像这样工作。但为什么要发明轮子呢?这就是Apache Portable Runtime的作用。 (这个网站似乎在这一分钟下来。)APR提供的一些独立于操作系统的东西(来自Wikipedia):

  • 内存分配和内存池功能
  • 原子操作
  • 动态库处理
  • 文件I / O
  • 命令参数解析
  • 锁定
  • 哈希表和数组
  • Mmap功能
  • 网络套接字和协议
  • 线程,进程和互斥功能
  • 共享内存功能
  • 时间例程
  • 用户和群组ID服务

答案 2 :(得分:1)

如果要强制执行某些操作,请创建一个名为“IOsInterface”(或类似)的接口类,用于描述所需的接口。任何实际的OS实现都必须履行此合同,即。继承自接口类并实现所有虚拟方法。

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,所有这些都是非常可行的选择。我认为,只有你的公司有一个严格的政策,一切都必须在内部创建,这是一个好主意。