#include #include #include template class with_history { public: with_history(const T& element) { history.push_front(element); } T get() { return history.front(); } void set(const T& element) { history.push_front(element); } std::deque get_history() { return std::deque(history); } T rollback() { if ( history.size() > 1 ) { history.pop_front(); } return history.front(); } private: std::deque history; }; int main() { with_history number(1.2345); std::cout << "Current value of number: " << number.get() << std::endl; number.set(3.4567); number.set(5.6789); std::cout << "Historical values of number: "; for ( const double& value : number.get_history() ) { std::cout << value << " "; } std::cout << std::endl << std::endl; with_history word("Goodbye"); word.set("Farewell"); word.set("Hello"); std::cout << word.get() << std::endl; word.rollback(); std::cout << word.get() << std::endl; word.rollback(); std::cout << word.get() << std::endl; word.rollback(); std::cout << word.get() << std::endl; word.rollback(); }