【问题标题】:How can I let my template class deduce the return and argument type of a function pointer template argument如何让我的模板类推断函数指针模板参数的返回和参数类型
【发布时间】: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;

并且返回类型是自动推导出来的?某种类型的工厂函数?

【问题讨论】:

    标签: c++ winapi templates


    【解决方案1】:

    【讨论】:

    • +1 指出这一点。不直接回答我的问题,但也许我可以用它来自己实现答案。很有希望看到可以从函数指针中提取返回类型和参数类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2021-05-23
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多