在C++中创建通用数值类的最佳方法是什么?我在想一个可以包含整数,浮点数和 double 数的对象。
我的第一个想法是使用将在数值类中使用的 union ,您可以在其中为每种类型定义允许的操作。就像是:
union mixed_number{
int a;
float b;
double c;
};
class Number{
//define operations
...
};
请让我知道是否有更好的方法。
最佳答案
我前一段时间做了一个通用的数值类。这里:
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;
}