基于继承的c++强制类型转换
C++ casting on the base of inheritance
我有一个叫做addV的方法,它接受两个参数。
static auto addV(Value* lval, Value* rval)
Value类型是一个父类,它有像IntegerValue, StringValue, FloatValue等子类。我永远不知道哪个孩子会被送进监狱。确定并添加它的最简单、最优雅的方法是什么?
示例:lval = IntegerValue(10), rval = StringValue("Bruce"), return = StringValue("1Bruce")
示例:lval = StringValue("Tom"), rval = IntegerValue(2), return = StringValue("Tom2")
示例:lval = IntegerValue(1), rval = FloatValue(3.0), return = FloatValue(4.0)
我之前有一篇文章是关于使用基本类型来做这个的。
价值类:
class Value {
protected:
typedef enum{
UndefinedType,
IntegerType,
ObjectType,
FloatType,
StringType,
BooleanType,
Last
} DataType;
public:
virtual DataType returnType(){
return UndefinedType;
};
};
IntegerValue类:
class IntegerValue: public Value{
public:
int32_t val;
IntegerValue(int32_t val) : val(val){}
DataType returnType(){
return Value::IntegerType;
};
};
FloatValue类:
class FloatValue: public Value{
public:
float val;
FloatValue(float val) : val(val) {}
DataType returnType(){
return Value::FloatType;
};
};
StringValue类:
class StringValue: public Value{
public:
string val;
StringValue(string val) : val(val){}
DataType returnType(){
return Value::StringType;
};
};
我会这样开始:
enum ValueTypesEnum {
IntValueE = 0,
FloatValueE = 1,
StringValueE = 2
};
class Value {
public:
virtual Value *create() = 0;
virtual ValueTypesEnum getType() = 0;
Value *max(Value *other) {
if (getType() > other->getType()) {
return this;
} else {
return other;
}
}
};
template <ValueTypesEnum MyType, class ValueT>
class ValueFactory:public Value {
public:
ValueTypesEnum getType() {
return MyType;
}
Value *create() {
return new ValueT();
}
};
class IntValue: public ValueFactory<IntValueE, IntValue> {
};
class FloatValue: public ValueFactory<FloatValueE, FloatValue> {
};
class StringValue: public ValueFactory<StringValueE, StringValue> {
};
Value *addV(Value *lval, Value *rval) {
lval->max(rval)->create();
// change to: return lval->max(rval)->create()->set(lval)->add(rval);
}
然后在新创建的值中添加设置元素的实现通过在具体类中实现set
和add
虚方法
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 事件系统:使用类型转换或联合进行继承
- 如何在参数中定义隐式类型转换的构造函数?
- 类模板实例化中的类型转换