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