我总是尝试通过这种方式将平台细节排除在主代码之外
平台.h:
#if BUILD_PLATFORM == WINDOWS_BUILD
#include "windows_platform.h"
#elif BUILD_PLATFORM == LINUX_BUILD
#include "linux_platform.h"
#else
#error UNSUPPORTED PLATFORM
#endif
someclass.c:
void SomeClass::SomeFunction()
{
system_related_type t;
// Other code
platform_SystemCall(&t);
// Other code
}
现在windows_platform.h
,如果从一个平台到另一个平台的参数集差异太大,那么linux_platform.h
您将 typedefsystem_related_type
输入到本机类型,或者作为本机调用,或者创建一个小型包装函数。#define platform_SystemCall
如果特定任务的系统 API 在平台之间存在很大差异,您可能需要创建自己的版本 API 来区分差异。但在大多数情况下,Windows 和 Linux 上的各种 API 之间存在相当直接的映射。
我不是依赖某些特定的编译器#define 来选择平台,而是#define BUILD_PLATFORM xxx
在项目文件或makefile 中,因为无论如何这些平台必须是唯一的。