template struct TempSetting { TempSetting(T* attr, SetFunc f, SetFuncParam init, SetFuncParam end) : m_attr(attr) , m_func(f) , m_init(init) , m_end(end) { ((*m_attr).*m_func)(m_init); } ~TempSetting() { ((*m_attr).*m_func)(m_end); } private: T* m_attr{ nullptr }; SetFunc m_func; SetFuncParam m_init, m_end; };