我總是嘗試做這種方式實現了平臺的細節出了主代碼的
platform.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
您將typedef system_related_type
設置爲本機類型,並將#define platform_SystemCall
作爲本機調用,或創建小包裝函數,如果從一個平臺設置到另一個平臺的參數太不同。
如果某個特定任務的系統API在各個平臺之間差異很大,則可能需要創建自己的版本API來區分差異。但大多數情況下,Windows和Linux上的各種API之間有相當直接的映射關係。
與其依靠某些特定的編譯器#define來選擇平臺,我在項目文件或makefile中定義BUILD_PLATFORM,因爲無論如何,這些必須是平臺唯一的。
有在Win32/Win64的條件編譯處理時的疑難雜症 - 編譯爲Win64的時候你會發現,_WIN32定義這樣的測試對_WIN64你測試前(!)對於_WIN32 – 2009-05-24 23:13:01