我的项目是关于制作一个基于海关类型进行基本数学运算的虚拟机,所以我有:
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...
}
答案 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可以表示为文本。