创建OS C ++特定API

时间:2013-04-23 11:45:34

标签: c++ header multiplatform

我需要创建一些API,通过调用函数,可以调用当前操作系统的正确API。

所以我接着说:

main.cpp:

#include "api.h"
int main() {
    helloWorld();
    return 0;
}

api.h:

void helloWorld();

api.cpp:

void helloWorld() {
    #ifdef __gnu_linux__    
        printf("Hello World of Linux");
    #endif
    #ifdef WIN32
        printf("Hello World of Windows");
    #endif
}

但这并不能让我满意。当我有大功能时,例如在Linux下获得进程的所有孩子的那些功能,以及许多其他功能,我将遇到空间问题,维护代码的可见性问题。

我尝试根据底层操作系统包含不同的标头,但这不能很好地工作,我不能有两个标头(一个用于Windows,一个用于Linux)和一个C ++文件。

那么,你知道我如何分离Linux和Windows的代码所以我最终得到两个文件(一个仅用于Linux,一个用于Windows),一个头文件将具有#ifdef条件?我无法让它发挥作用......

1 个答案:

答案 0 :(得分:1)

我是通过以下方式做到的:

main.cpp和api.h没有任何修改。

api.cpp:

#ifdef linux
    #include "linux_api.h"
#endif
#ifdef WIN32
    #include "windows_api.h"
#endif

void helloWorld() {
    #ifdef linux
        helloWorld_linux();
    #endif
    #ifdef WIN32
        helloWorld_win32();
    #endif
}

然后,您需要提供linux_api.hlinux_api.cppwindows_api.hwindows_api.cpp。优点是这四个文件已经是特定于平台的。您只需在api.cpp中为每个函数创建“粘合代码”。

linux_api.h:

void helloWorld_linux();

linux_api.cpp:

#include "linux_api.h"

#include <cstdio>

void helloWorld_linux()
{
    std::printf( "Hello world from linux..." );
}

希望这有帮助。