如何让我的模板类推导出函数指针模板参数的返回和参数类型

时间:2011-05-05 15:32:54

标签: c++ winapi templates

我正在使用一个小帮助模板来包装不同的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 个答案:

答案 0 :(得分:2)