跨平台C ++:在类

时间:2015-09-08 16:51:26

标签: c++ linux windows architecture cross-platform

我正在开发一个应该在Linux和Windows 7+上运行的C ++项目。这也是我几年前在一个非常简单和简短的基础课程之后使用C ++的第一周。

假设我需要访问文件系统,但由于操作系统有不同的API,我需要创建一个包装类来使事情保持一致。

以下工作如何:

拥有基类File。从文件I继承WinFileLinuxFile,它们实现基类公共方法(例如createFilereadFile等)。然后在两个子类中,我实现公共方法以映射到特定于平台的方法(WINAPI文件处理和UNIX文件处理)。

然后我会使用预处理器指令在主应用程序中有条件地加载WinFileLinuxFile

int main()
{
    #if defined WIN32
    WinFile fileSystem;
    #elif defined LINUX
    LinuxFile fileSystem;
    #endif

    // Both of above contain the same public method API.

    std::string filedata;
    filedata = fileSystem.readFile(...);

    ...
}

我的直觉说这应该有用,但有任何缺点吗?这会轻易成为可维护性问题吗?预处理器指令是否被视为“黑客”或其他什么?我知道它们与头文件一起使用包括警卫等,但它们是编译器相关的逻辑,而不是与应用程序相关的逻辑。

有什么其他方法可以实现我在这里要做的事情吗?

1 个答案:

答案 0 :(得分:1)

您可以在头文件中定义API并将实现移动到cpp文件中。 添加依赖于您的os(或保护.cpp文件)宏的.cpp源文件,例如:

// File.h
class File
{
public:
    void open(std::string);
};

// File_impl_win.cpp (compiled when win)
void File::open(std::string)
{
    // impl
}

// File_impl_lin.cpp (compiled when linux)
void File::open(std::string)
{
    // impl
}

优点是你不需要区分LinuxFile和WindowsFile,而是只有一个api。

但是有一个令人惊奇的跨平台升级库,用于文件系统的使用,boost filesystem,你可以使用它。