我想在C中声明一个泛型变量类型(我不能C++),我在脑海中有以下选项。声明泛型变量类型
选项1
typedef struct
{
void *value;
ElementType_e type;
} Data_t;
选项2
typedef struct {
ElementType_e type;
union {
int a;
float b;
char c;
} my_union;
} my_struct;
其中ElementType_e是保存所有可能类型的变量的枚举(例如INT,炭,无符号整型,等等。)。我有点倾向于选项1,因为我不相信与开关相比,选角会增加额外的计算时间,对吧?
我只是想知道哪种类型更有用?我知道选项1将需要每次使用/访问时进行投射。是否有任何可能的问题可能发生与铸造(尤其是在不同的平台上运行/编译代码,例如32位和16位微)
虽然option2需要开关()做任何操作(例如添加,。 ..)。
以下链接解释了选项2更好(从可读性的角度来看),但我主要关注代码大小和计算成本。 Generic data type in C [ void * ]
你需要在void指针上进行算术运算时进行类型转换,对吧?你假设编译器(/运行时)知道指针设置为什么类型的对象,并执行操作,这是不正确的。 当你说第二个选项是警告,它增加了更多的计算时间? –
@ rasred2004:“*你假设编译器(/ run-time)知道指针的类型是什么对象*”不,我不知道。我假定在应用任何操作之前,'void'指针的值被赋给了一个指向'ElementType_e'描述的类型的指针的实例。 – alk
请看我更新的答案。 @ rasred2004 – alk