スコープの外に出たとき、元の値に戻す

(2003.09.18)
#pragma once
 
 
template <class T>
static HRESULT __CopyValue(T* src, T* dst)
{
    if (src == NULL || dst == NULL)
    {
        return E_FAIL;
    }
 
    *dst = *src;
 
    return S_OK;
}
 
template <>
static HRESULT __CopyValue<CComDynamicUnkArray>(CComDynamicUnkArray* src, CComDynamicUnkArray* dst)
{
    if (src == NULL || dst == NULL)
    {
        return E_FAIL;
    }
 
    dst->clear();
    
    for (int i = 0; i < (int)src->GetSize(); i++)
    {
        dst->Add(src->GetAt(i));
    }
 
    return S_OK;
}
 
 
////////////////////////////////////////////////////////////////////////////////
// CRestoreValue
 
template<class T>
class CRestoreValue  
{
public:
    CRestoreValue(T& value) : m_value(value)
    {
        HRESULT hr = S_OK;
 
        hr = ::__CopyValue(&m_value, &m_valueOld);    
        if (FAILED(hr))
        {
            // 無視する。。
        }
 
        m_hr = hr;
    }
    ~CRestoreValue()
    {
        HRESULT hr = S_OK;
 
        hr = ::__CopyValue(&m_valueOld, &m_value);
        if (FAILED(hr))
        {
            // 無視する。。
        }
    }
 
public:
    T& m_value;
    T m_valueOld;
 
    HRESULT m_hr;
};
一覧に戻る
© 2003 WAC.com All Right Reserved.