Something like this should do what you want:
Code:
#include <climits>
template <int MINRANGE = INT_MIN, int MAXRANGE = INT_MAX >
class rangedInteger {
int value;
public:
operator int() const {
return value;
}
rangedInteger() : value(MINRANGE) {
}
rangedInteger(int val) : value(val) {
if (value < MINRANGE || value > MAXRANGE) throw std::exception("Out of range");
}
rangedInteger(const rangedInteger &r) : value(r.value) {
if (value < MINRANGE || value > MAXRANGE) throw std::exception("Out of range");
}
const rangedInteger& operator = (const rangedInteger &r) {
value = r.value;
if (value < MINRANGE || value > MAXRANGE) throw std::exception("Out of range");
return *this;
}
};
Declare and use the variable like this:
Code:
rangedInteger<-1000, 1000> ri;
ri = -397;
ri = ri + 2000; // Will throw an exception
Edit: Fixed defaults