2011-05-05 41 views
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; 

而且返回類型自動推斷?某種類型的工廠功能?

回答