#pragma once template class PushMemVar { public: PushMemVar(T &var, const T &val); ~PushMemVar() ; protected: T *m_pVarBackup; T m_valBackup; }; template PushMemVar::PushMemVar(T &var, const T &val) { m_pVarBackup = &var; m_valBackup = var; var = val; } template PushMemVar::~PushMemVar() { *m_pVarBackup = m_valBackup; }