句柄关闭模板

本文介绍了一个使用模板特化的C++类CDestructor的实现细节。该类通过模板特化支持不同类型的函数指针,示例中展示了如何为标准调用和__stdcall调用的函数指针创建特化版本。此外,还提供了一个使用CreateMutex和CloseHandle的例子来展示如何利用此类自动调用析构函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    template <typename T> class CDestructor;

    template <typename T1, typename T2>
    class CDestructor<T1 (*)(T2)>    //模板特化,这里类型 T 特化为一个函数指针 T1(*)(T2),改函数参数一个为T2,返回类型为T1
    {
    public:
        typedef T1 (*FuncPtr)(T2);
        CDestructor(FuncPtr fp, T2 param):m_ptr(fp), m_param(param) {};
        ~CDestructor() {(*m_ptr)(m_param);};
    private:
        T2 m_param;
        FuncPtr m_ptr;
    };

    template<typename T1, typename T2>
    class CDestructor<T1 (__stdcall *)(T2)>
    {
    public:
        typedef T1 (__stdcall * FuncPtr)(T2);
        CDestructor(FuncPtr fp, T2 param):m_ptr(fp), m_param(param) {};
        ~CDestructor() {(*m_ptr)(m_param);};

    private:
        T2 m_param;
        FuncPtr m_ptr;
    };

//Usage sample
    HANDLE hd = ::CreateMutex(NULL, true, L"TestMutex");
    ms::CDestructor<BOOL(__stdcall*)(HANDLE)> dstructor(CloseHandle, hd);

 

转载于:https://www.cnblogs.com/huangyong9527/archive/2012/06/19/2554380.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值