在对基本类型进行数学运算时检查上溢/下溢

时间:2016-07-15 14:15:56

标签: c++

我的项目是关于制作一个基于海关类型进行基本数学运算的虚拟机,所以我有:

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

我有一个基本工厂,当我这样做时会创建IOperands:

Factory         f;

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

我的问题是我需要检查作为参数传递的字符串是否为OverFlow或UnderFlow,我想用...创建变量的类型

类似的东西:

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

1 个答案:

答案 0 :(得分:0)

看起来你可以使用Abstraction类和几个类型类。

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可以表示为文本。