阅读背景:

让函数返回C ++类中的任何类型

来源:互联网 

I've got this class:

我有这门课:

#define TYPE_INVALID 0x00
#define TYPE_BYTE    0x01
#define TYPE_SHORT   0x02
#define TYPE_INT     0x03
#define TYPE_LONG    0x04
#define TYPE_FLOAT   0x05
#define TYPE_DOUBLE  0x06

class BASIC_TYPE
{
    private:
        int8_t  type;
        int8_t  byteValue;
        int16_t shortValue;
        int32_t intValue;
        int64_t longValue;
        float   floatValue;
        double  doubleValue;

    public:
        BASIC_TYPE();
        template<typename T> BASIC_TYPE(int8_t, T);

        template<typename T> void set(T);
        template<typename T> T    get();
};

BASIC_TYPE::BASIC_TYPE()
{
    type = TYPE_INVALID;
}

template<typename T> BASIC_TYPE::BASIC_TYPE(int8_t newType, T value)
{
    type = newType;
    set(value);
}

template<typename T> void BASIC_TYPE::set(T value)
{
    switch(type)
    {
        case TYPE_BYTE   : byteValue   = value; break;
        case TYPE_SHORT  : shortValue  = value; break;
        case TYPE_INT    : intValue    = value; break;
        case TYPE_LONG   : longValue   = value; break;
        case TYPE_FLOAT  : floatValue  = value; break;
        case TYPE_DOUBLE : doubleValue = value; break;
    }
}

template<typename T> T BASIC_TYPE::get()
{
    switch(type)
    {
        case TYPE_BYTE   : return byteValue;
        case TYPE_SHORT  : return shortValue;
        case TYPE_INT    : return intValue;
        case TYPE_LONG   : return longValue;
        case TYPE_FLOAT  : return floatValue;
        case TYPE_DOUBLE : return doubleValue;
    }
}
#define TYPE_IN



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: