Along the lines of Alain Rists idea:
#include <cmath>
template<typename T>
class Primitive
{
private:
T _var;
public:
Primitive(const T& var)
: _var(std::abs(var))
{}
operator T ()
{
return _var;
}
Primitive& operator = (const T& var)
{
_var = std::abs(var);
return *this;
}
};
typedef Primitive<double> DoublePrimitve;
typedef Primitive<long> LongPrimitve;
typedef Primitive<__int64> LongLongPrimitve;
typedef Primitive<long double> LongDoublePrimitve;
typedef Primitive<float> FloatPrimitve;
Now you can even reuse the implmentation :)
Regards
Espen Harlinn