2
我使用了一個小幫手模板來包裝不同的Windows功能,釋放資源,如函數指針模板參數的返回和參數類型:我怎樣才能讓我的模板類推斷
template <typename Resource, typename ReturnType, ReturnType (WINAPI *GlobalFn)(Resource)>
struct GlobalWINAPIFn {
inline void release(Resource r) { (void)GlobalFn(r); }
};
實例化該模板實際上作爲參數傳遞給另一個模板(期望給定的類型公開release
函數,其類型爲Resource
)。這個幫助器用於輕鬆包裝全局方法。
我使用它像
// wraps BOOL WINAPI CloseHandle(HANDLE);
typedef GlobalWINAPIFn<HANDLE, BOOL, ::CloseHandle> HANDLEDestructor;
// wraps LONG WINAPI RegCloseKey(HKEY);
typedef GlobalWINAPIFn<HKEY, LONG, ::RegCloseKey> HKEYDestructor;
它的工作原理,但我不知道 - 有什麼辦法改寫模板,這樣我可以只寫
typedef GlobalWINAPIFn<::CloseHandle> HANDLEDestructor;
typedef GlobalWINAPIFn<::RegCloseKey> HKEYDestructor;
而且返回類型自動推斷?某種類型的工廠功能?
+1指出了這一點。不直接回答我的問題,但也許我可以使用它來自己實現答案。它很有希望看到返回類型和參數類型可以從函數指針中提取。 – 2011-05-06 05:32:10