我正在使用一个小帮助模板来包装不同的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;
返回类型会自动推断吗?某种类型的工厂功能?
答案 0 :(得分:2)