我正在使用C++庫,其中的一部分是我需要的幾個OS函數的抽象層。我開始使用Windows API實現它,但打算使用#ifdef等添加對其他平臺的支持。如何在不污染代碼的情況下包含WinAPI?
然而,開始成爲一個問題的是,包括Windows.h在內的所有其他代碼都會傳播到我不需要它的地方,尤其是因爲它是一個庫,它也會污染其他代碼那些會使用它的人。我真的不介意Windows API是使用命名空間還是一些清晰的方法來區分它的代碼,而是它們#定義了很多很常見的單詞,如小,近,遠(小寫),以及許多函數名稱也相當一般。
所以我真的很喜歡,如果只有我的代碼的平臺特定部分訪問這些,它不會被包括在其他地方。我知道,明顯的解決方案是隻包括WINDOWS.H在CPP文件,但事實並非總是可能的,因爲某些平臺的特定數據類型或結構類的成員變量如:
class Window {
public:
// ...
private:
HWND handle;
};
所以有沒有辦法做到這一點?
謝謝。
您的圖書館是否需要導出任何windows.h定義供您的圖書館用戶使用,或者您的圖書館是否僅在內部使用Win32API,因此只需要導出您的聲明? – franji1
它應該只在內部使用Windows特定功能。 – Detheroc
看來您可以將您的對象重建爲更多的接口/包裝器,客戶端可以在其中調用對象工廠來創建接口的派生實例。派生類包含像HWND等實現細節。 – franji1