gpt4 book ai didi

c++ - int/float/string值之间的操作,组合太多

转载 作者:行者123 更新时间:2023-11-28 03:00:44 24 4
gpt4 key购买 nike

我正在编写一个具有(当前)3 种标量数据类型的小型解析器:int、float 和 string (char *):

typedef enum eValueType
{
E_INT, E_FLOAT, E_STRING
}
eValueType;

class CValue
{
protected:

union
{
int _i; float _f; char * _s;
};

eValueType _eType;

// ...
};

我想重载所有需要的运算符(+、-、*、/、&&、|| 等),以便我可以轻松地操作我的 CValue 对象。问题是要定义的行为数量是组合的:

CValue operator + ( const CValue & roVal )
{
switch( roVal._eType ) {
case E_INT :
switch( this->_eType ) {
case E_INT :
break;
case E_FLOAT :
break;
case E_STRING :
break;
}
break;

case E_FLOAT :
switch( this->_eType ) {
case E_INT :
break;
case E_FLOAT :
break;
case E_STRING :
break;
}
break;

case E_STRING :
switch( this->_eType ) {
case E_INT :
break;
case E_FLOAT :
break;
case E_STRING :
break;
}
break;
}
}

这就是我只有 3 种类型,对于单个运算符,并且没有我必须在每种情况下添加的代码。我无法想象如果我添加函数、数组等...

是否有某种设计模式或方法可以用来减少我为处理每个运算符的每种类型组合而必须编写的代码量?

谢谢你:)

编辑:我想避免使用 C++11 功能。

最佳答案

解决方案是将一侧(或两侧,如果您愿意)提升为一个可以包含所有重要信息的值。然后在提升之后,每种类型只有一个操作。

例如,像 3.33 * 2 这样的表达式应该是 E_FLOAT * E_FLOAT。 4/2 应该是 E_INT/E_INT。而 3.33 * "3" 应该是 E_FLOAT * E_FLOAT。

关于c++ - int/float/string值之间的操作,组合太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20920695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com