在结构中创建未知数据类型数组

Creating a unknown data type array into a structure?

本文关键字:数据类型 数组 未知 创建 结构      更新时间:2023-10-16

我有一个用值填充类结构的结构:

MyType structMy[] =
{
  { START,  INTEGER_TYPE, 3, (void *)&classStart->statusStart.set    },
  { STABLE, CHAR_TYPE,    5, (void *)&classtStable->statusStable.set },
  { STOP,   DOUBLE_TYPE,  1, (void *)&classStop->statusStop.set      }
}

但是为了测试和验证,我想在结构中添加测试用例:一些值依赖于每行定义的数据类型和值的数量。

但是由于结构设置和1值或数组,我认为我需要一个(void*)。但是编译器不喜欢它。如何将数组写入数据类型可以更改的结构中?

MyType structMy[] =
{
  { START,  INTEGER_TYPE, 3,  (void*){0, 1, 2}                 },
  { STABLE, CHAR_TYPE,    5,  (void*){'A', 'B', 'C', 'D', 'E'} },
  { STOP,   DOUBLE_TYPE,  1,  (void*){2.4}                     }
}

编译器需要指针在那里,所以尝试在其他地方声明数据:

int is[] = {0, 1, 2};
char cs[] = {'A', 'B', 'C', 'D', 'E'};
double ds[] = {2.4};
MyType structMy[] =
{
     {START, INTEGER_TYPE, 3,  (void*)is },
     {STABLE, CHAR_TYPE, 5,  (void*)cs },
     {STOP, DOUBLE_TYPE, 1,  (void*)ds }
}

通过告诉编译器期望的类型,可以这样做:

MyType structMy[] =
{
   { START,  INTEGER_TYPE, 3,  (void*)(int[]){0, 1, 2}                  },
   { STABLE, CHAR_TYPE,    5,  (void*)(char[]){'A', 'B', 'C', 'D', 'E'} },
   { STOP,   DOUBLE_TYPE,  1,  (void*)(double[]){2.4}                   }
}