DataObj支持int float double三种类型,现在要设计一个less than函数,比较两个DataObj,并将结果存入到result中。一种实现:
还好只有三种类型,只写了3*3中组合,如果还有更多类型,那就累死了!如何改进这个过程?封装。
只要DataObj内部实现比较函数即可。
bool DataDataj::operator < (const DataDataj &that_obj) const
{
bool result = false;
int err = DATA_SUCCESS;
_DatajValue this_value;
_DatajValue that_value;
DataDatajType type = get_type();
switch (type)
{
case DataIntType:
err = get_int(this_value.int_val);
if (DATA_SUCCESS == err)
{
err = that_obj.get_int(that_value.int_val);
if (DATA_SUCCESS == err)
{
result = this_value.int_val < that_value.int_val;
}
}
break;
case DataVarcharType:
err = get_varchar(this_value.varchar_val);
if (DATA_SUCCESS == err)
{
err = that_obj.get_varchar(that_value.varchar_val);
if (DATA_SUCCESS == err)
{
result = this_value.varchar_val < that_value.varchar_val;
}
}
break;
case DataFloatType:
err = get_float(this_value.float_val);
if (DATA_SUCCESS == err)
{
err = that_obj.get_float(that_value.float_val);
if (DATA_SUCCESS == err)
{
result = this_value.float_val < that_value.float_val;
}
}
break;
case DataDoubleType:
err = get_double(this_value.double_val);
if (DATA_SUCCESS == err)
{
err = that_obj.get_double(that_value.double_val);
if (DATA_SUCCESS == err)
{
result = this_value.double_val < that_value.double_val;
}
}
break;
}
return result;
}