我正在编写一个模板化的类,它封装了win32处理RAII.这是我到目前为止所得到的:
#define NOMINMAX
#include <Windows.h>
#include <functional>
// problem: optionally pass additional params to the deleter function
template<typename ResourceT, std::function<void(ResourceT)> &Deleter>
class Win32Raii
{
Win32Raii(const Win32Raii &);
Win32Raii &operator=(const Win32Raii &);
public:
Win32Raii()
: m_resource(nullptr)
{}
Win32Raii(const ResourceT &r)
: m_resource(r)
{}
Win32Raii(Win32Raii &&other)
: m_resource(nullptr)
{
*this = std::move(other);
}
~Win32Raii()
{
if (m_resource)
{
Deleter(m_resource);
}
}
Win32Raii &operator=(Win32Raii &&other)
{
std::swap(m_resource, other.m_resource);
return *this;
}
ResourceT get() const { return m_resource; }
private:
ResourceT m_resource;
};
// …Run Code Online (Sandbox Code Playgroud)