跨平台的核心挑戰
同一函數在 Windows/Linux 下參數、返回值、語義可能不同(如 socket、sleep)。手寫 #ifdef WIN32 ... #elif LINUX ... 維護成本極高(參考 ACE 開發投入)。**站在巨人肩膀上,選擇成熟跨平台庫是唯一正道**。
推薦技術棧分層選型
0. 語言與基礎庫:標準 C++ + Boost
- 編譯器:MSVC 19.20+ (VS2019)、GCC 9+、Clang 10+;
- Boost:準標準庫,涵蓋字符串處理 (
boost::algorithm)、格式化 (boost::format)、正則 (boost::regex)、智能指針、文件系統、線程、ASIO 網絡等;
- C++17/20 已將大量 Boost 組件納入標準(
std::filesystem, std::format, std::regex 等)。
1. 操作系統抽象:ACE 或 Boost.Thread/Process
- ACE (ADAPTIVE Communication Environment):重量級、全面封裝鎖、信號量、進程、線程、反應器模式,網絡編程首選;
- Boost.Thread / Boost.Process:輕量、現代 C++ 風格,無網絡需求時足夠。
2. 網絡通信:ACE 或 Boost.Asio
- ACE 內建 Reactor/Proactor,支持 IOCP (Windows)、epoll (Linux 2.6+);
- Boost.Asio:現代、無侵入、C++11/20 協程支持極佳,**新專案首選**;
- 高性能場景:直接用 libuv、libevent、seastar。
3. 數據庫訪問:OTL (Oracle, Odbc and DB2-CLI Template Library)
- 單頭文件、模板實現、零依賴;
- 支持 Oracle、SQL Server、MySQL、PostgreSQL、DB2、ODBC;
- 同時提供原生接口與 ODBC 兩種模式,性能可控;
- 替代方案:SOCI、Qt SQL、ODBC 直接調用。
4. GUI 界面:Qt 或 wxWidgets
| 特性 | Qt | wxWidgets |
| 編程風格 | 現代 C++、信號槽、QML | MFC 風格、事件表 |
| 許可證 | 雙授權 (GPL/商業) | LGPL-like,商業友好 |
| 生態/工具 | Qt Creator、插件豐富 | 較弱 |
| 推薦場景 | 新專案、複雜 UI、跨平台桌面/移動/嵌入式 | 遷移 MFC、成本敏感商業閉源 |
「一次編碼,到處編譯」的落地建議
- 用 CMake 管理構建,生成 VS solution / Makefile / Ninja;
- CI/CD 跑 Windows/Linux/macOS 三端編譯測試;
- 抽象平台差異層,業務代碼零
#ifdef;
- 依賴管理用 vcpkg / Conan / system package manager。
結語
跨平台非一日之功,但選對庫、建好構建體系、持續集成驗證,就能實現真正的「Write once, compile everywhere」。Boost + Asio + OTL + Qt/CMake 是當前最成熟、生態最豐的組合。