Creating a generic number class in C ++

What is the best approach for creating a generic number class in C ++? I am thinking of an object that can contain integers, float and double.

My first idea is to use a union, which will be used in a number class, where you can define the allowed operations for each type. Sort of:

union mixed_number{ int a; float b; double c; }; class Number{ //define operations ... }; 

Please let me know if there is a better approach.

+4
source share
1 answer

I made a general number class a while ago. Here:

 /** @author Muhammad Ahmad Tirmazi **/ template< typename T> class TypeWrapper { T value; public: TypeWrapper(T v): value(v) {} operator T() { return value; } // basic arithmetic operators void operator = (T v){ value = v; } TypeWrapper operator + (T v) { return TypeWrapper( value + v ); } TypeWrapper operator - (T v) { return TypeWrapper( value - v); } TypeWrapper operator * (T v) { return TypeWrapper( value * v); } TypeWrapper operator / (T v) { return TypeWrapper( value / v); } TypeWrapper operator % (T v) { return TypeWrapper( value % v); } void operator += (T v) { value += v; } void operator -= (T v) { value -= v; } void operator *= (T v) { value *= v; } void operator /= (T v) { value /= v; } void operator %= (T v) { value %= v; } T operator ++ () { return ++value; } T operator -- () { return --value;} T operator ++ (int v) { return value++; } T operator -- (int v) { return value--; } // conditions bool operator == (T v) { return value == v; } bool operator != (T v) { return value != v; } bool operator > (T v) { return value > v; } bool operator < (T v) { return value < v; } bool operator >= (T v) { return value >= v; } bool operator <= (T v) { return value <= v; } T toPrimitive() { return value; } string toString() { stringstream ss; string rtn; ss << value; ss >> rtn; return rtn; } }; // just to make things easier for a future move. #define NumericTypeWrapper TypeWrapper typedef NumericTypeWrapper< int > Integer; typedef NumericTypeWrapper< double > Double; typedef NumericTypeWrapper< float > Float; } 
+5
source

Source: https://habr.com/ru/post/1402710/


All Articles