我正在使用某些脚本语言。包含结构的值是

struct myvar
{
 char  name[NAMELEN];
 int   type;
 void* value;
}
type = 0  --> int* value
type = 1  --> char* value
type = 2  --> float* value


我在算术运算上遇到了一些问题。似乎我需要在每个操作上进行各种类型转换,从而发展成为每个操作编写一堆代码,如下所示:

case 0:  // "="
 if(factor1.name)
 {
    if((factor1.type == 1) && (factor2.type==1))
    {
        free(factor1.value);
        int len = (strlen((STRING)factor2.value)+1)*sizeof(char);
        factor1.value = malloc(len);
        memcpy(factor1.value,factor2.value,len);
    }
    else if((factor1.type == 2) && (factor2.type==2))
    *(FLOAT*)factor1.value = *(FLOAT*)factor2.value;
    else if((factor1.type == 0) && (factor2.type==0))
    *(INTEGER*)factor1.value = *(INTEGER*)factor2.value;
    else if((factor1.type == 0) && (factor2.type==2))
    *(INTEGER*)factor1.value = *(FLOAT*)factor2.value;
    else if((factor1.type == 2) && (factor2.type==0))
    *(FLOAT*)factor1.value = *(INTEGER*)factor2.value;
    else
     GetNextWord("error");
 }
 break;


有什么办法可以避免这种繁琐的过程?否则,我别无选择,只能为“ =“,”〜“,” +“,”-“,” *“,” /“,”%“,”>“,”复制粘贴这段代码 =“,”

最佳答案

编写3个toType函数怎么样:

char* toType0(myvar* from)
{
   if (from->type == 0) return (char*)(from->value);
   else if (from->type == 1) return itoa((int*)from->value);
   else...
}
int toType1(myvar* from)
{
   //convert to int...
}


然后,可以在转换例程中执行以下操作:

 switch (factor1.type)
 {
    case 0:
     { char* other = toType0(&factor2);
     //assign or add or whatever....
     };
     break;
     case 1:
     { int other = toType1(&factor2);
     //assign or add or whatever....
     };
     break;
     ...
  }

09-25 17:10