在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;
}

09-05 22:47