2016-07-15 79 views
-2

我的項目是做一個虛擬機,做基本的數學在海關類型,所以我做數學時檢查溢/下溢有:基本類型

typedef char int8; 
typedef short int16; 
typedef int  int32; 

我有創造,當我做IOperands基本廠:

Factory   f; 

f.createOperand(INT8, "1"); 
f.createOperand(INT16, "20"); 
f.createOperand(INT32, "-1234567"); 

我的問題是,我需要檢查,如果作爲參數傳遞的字符串不會溢出或下溢的類型,我想創建一個變量...

類似:

if (value < CHAR_MIN || value > CHAR_MAX) 
{ 
    // do something... 
} 
+3

目前尚不清楚你在尋求什麼幫助。 – Tyler

+3

爲什麼typedefs?爲什麼不使用標準的'int8_t','int16_t'和'int32_t'?另外,根據平臺的不同,你的類型定義是*錯誤的 - 例如,'int'不能保證是32位(對於「短」和16位相同)。 –

+0

你正在處理一種語言,就像Java虛擬機一樣嗎? –

回答

0

看起來你可以使用一個抽象類和幾個類型類。

Abstract,Parent或Root類將包含所有孩子必須實現的通用方法。

例如:

class Base_Type 
{ 
    public: 
    virtual bool value_is_in_range(const std::string& value_as_text) const = 0; 
}; 

每個子類將專門的抽象方法:這裏

class Uint8_Type 
{ 
    public: 
    bool value_is_in_range(const std::string& value_as_text) const 
    { 
     std::istringstream value_stream(text); 
     unsigned int value; 
     value_stream >> value; 
     if (value > CHAR_MAX) 
     { 
      return false; 
     } 
     return true; 
    } 
    }; 

兩個概念:1)一個共同的,普遍的數據類型傳遞值; 2)如果將字符串轉換爲數字以進行範圍檢查,則該數字必須是較大的類型。

我選擇了std::string並將文本用作通用數據類型。大多數POD可以表現爲文字。