【发布时间】:2011-05-05 15:32:54
【问题描述】:
我正在使用一个小助手模板来包装不同的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;
并且返回类型是自动推导出来的?某种类型的工厂函数?
【问题讨论】: