該如何包裝"Handle"類型的資源?
在C++的世界裡,我認為RAII是普世的認知,所以會將資源包裝起來。
#include < windows.h >
struct HandleTraits final {
static HANDLE invalid() noexcept;
static void close(HANDLE value) noexcept;
};
using WinHandle = UniqueHandle;
這方法看似乎很完美,但是include一個巨大的windows.h,這會導致整個專案編譯時間過長。 目前我已知的兩種解決方式:
- 將你使用到Windows.h的類型複製到你的實作檔(.cpp)。
- 使用LoadLibrary載入你要的函數(這樣的方式也只有函數的部分而已)。
- 使用void*替代任何HANDLE類型,然後在使用的時候強制轉型。
留言
張貼留言