我正在尝试在项目中构建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
现在,这不适合我。主要原因是理论上我们想要定义一组独立于操作系统的函数,并且在每个系统上具有完全相同的集合,只是具有不同的实现。
这种严格的关系可以通过任何编程模式来实施吗?也就是说,规则“每个操作系统实现必须实现这组功能,不能再少了”。
编辑:我只是说清楚我正在问如何通过设计/编程模式强制实现这种关系,而不是链接到其他独立于操作系统的库。
答案 0 :(得分:1)
已有C ++库提供。例如Qt的QtCore部分
答案 1 :(得分:1)
是的,它可以像这样工作。但为什么要发明轮子呢?这就是Apache Portable Runtime的作用。 (这个网站似乎在这一分钟下来。)APR提供的一些独立于操作系统的东西(来自Wikipedia):
答案 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,所有这些都是非常可行的选择。我认为,只有你的公司有一个严格的政策,一切都必须在内部创建,这是一个好主意。