程序語言、軟件或硬件設備能在多種操作系統、不同硬件架構上運作。目標:不依賴特定 OS、不依賴特定硬件,實現廣泛適用。
避免後期移植時重寫大量代碼、甚至重新設計架構的巨大成本。前期投入跨平台設計,長遠收益極高。
| 類別 | 典型案例 | 原因 |
|---|---|---|
| 非跨平台應用框架 | MFC、WinForms | 與 Windows 內核/API 深度耦合 |
| 特定 OS API | Win32 API、WinSocket | 不同 OS 接口不兼容 |
| 非跨平台第三方軟件 | Access 數據庫 | 運行時環境綁定 Windows |
| 非跨平台第三方庫 | DirectX | 僅支持 Windows 圖形/多媒體 |
| 非跨平台代碼語句 | #pragma once、Sleep、CString、TRACE | 編譯器/庫擴展,非標準 C++ |
OS API 本質是封裝好的文件、網絡、線程、內存操作。Boost 庫提供完整替代:
Boost.FilesystemBoost.AsioBoost.ThreadBoost.SmartPtr / 標準庫 <memory>配合 STL 容器/算法,幾乎覆蓋所有系統級操作需求。
// 替換 #pragma once
#ifndef MY_HEADER_H
#define MY_HEADER_H
// ...
#endif
// 替換 Sleep() 等平台差異函數
#if defined(_WIN32)
#include <windows.h>
#define MSLEEP(ms) Sleep(ms)
#elif defined(__linux__)
#include <unistd.h>
#define MSLEEP(ms) usleep((ms)*1000)
#else
#error "Unsupported platform"
#endif
QDir::separator() 或 Boost.Filesystem 路徑對象。int 可能 2/4/8 字節。永遠用 sizeof(T),勿寫死數字。sizeof(Struct),勿手算偏移。跨平台非一蹴而就,需在架構選型、庫依賴、代碼規範三個維度持續投入。建立「標準庫優先、第三方庫次之、OS API 最後」的依賴倒置思維,才是跨平台的核心心法。
本文出自 “對影成三人” 博客,原文地址:https://ticktick.blog.51cto.com/823160/289618