History variables: Difference between revisions
Content added Content deleted
m (Corrected a typo.) |
(New post.) |
||
Line 522: | Line 522: | ||
{{out}} |
{{out}} |
||
<pre>foobar <- foo <- 5 |
<pre>foobar <- foo <- 5 |
||
</pre> |
|||
=={{header|C++}}== |
|||
C++ does not have history variables, but they can easily by implemented with a generic class. |
|||
<syntaxhighlight lang="c++"> |
|||
#include <deque> |
|||
#include <iostream> |
|||
#include <string> |
|||
template <typename T> |
|||
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<T> get_history() { |
|||
return std::deque<T>(history); |
|||
} |
|||
T rollback() { |
|||
if ( history.size() > 1 ) { |
|||
history.pop_front(); |
|||
} |
|||
return history.front(); |
|||
} |
|||
private: |
|||
std::deque<T> history; |
|||
}; |
|||
int main() { |
|||
with_history<double> 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<std::string> 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(); |
|||
} |
|||
</syntaxhighlight> |
|||
{{ out }} |
|||
<pre> |
|||
Current value of number: 1.2345 |
|||
Historical values of number: 5.6789 3.4567 1.2345 |
|||
Hello |
|||
Farewell |
|||
Goodbye |
|||
Goodbye |
|||
</pre> |
</pre> |
||