The following are a few things that I like to keep around so I can always quickly implement similar things the correct way in C++
In C++ it is possible to override most of the standard C and additional C++ operators. This includes the pre- and post-increment operators (there are 4 of these).
The following shows you a template like implementation of these operators. You will notice that to distinguish between both versions, C++ uses an (int) parameter. This (int) is ignored. When the (int) is present, the function is a post-increment or post-decrement. The (void) declaration is the pre-increment or pre-decrement.
Name | C++ function | Comments |
---|---|---|
Post-increment | T operator ++ (void) { T copy = *this; ++*this; return copy; } |
We assume that the template type T has at least the pre-increment operator defined. Note that we need to copy the current value first and this means the type T needs to have a copy operator. |
Pre-increment | T& operator ++ (void) { return ++*this; } |
We assume that the template type T has the pre-increment operator defined. |
Post-decrement | T operator -- (void) { T copy = *this; --*this; return copy; } |
We assume that the template type T has at least the pre-decrement operator defined. Note that we need to copy the current value first and this means the type T needs to have a copy operator. |
Pre-decrement | T& operator -- (void) { return --*this; } |
We assume that the template type T has the pre-decrement operator defined. |