假设我们有一个联盟:
typedef union someunion {
int a;
double b;
} myunion;在我设置了例如a=123之后,是否可以检查联合中的类型?我的方法是将这个联合添加到某个结构中,并在int为int时将uniontype设置为1,当为double时将uniontype设置为2。
typedef struct somestruct {
int uniontype
myunion numbers;
} mystruct;有没有更好的解决方案?
发布于 2013-05-18 18:30:00
有没有更好的解决方案?
不,你展示的解决方案是最好的(也是唯一的)。union非常简单--它们不会“跟踪”你分配给了什么。它们所做的就是让您为所有的成员重用相同的内存范围。除此之外,它们不提供任何其他内容,因此将它们封装在struct中并使用"type“字段进行跟踪正是正确的做法。
发布于 2013-05-18 18:31:27
C不会自动跟踪联合中当前正在使用的字段。(事实上,我认为从“错误”字段读取会导致实现定义的行为。)因此,由您的代码来跟踪当前使用/填充的是哪一个。
你保持一个单独的'uniontype‘变量的方法是一种非常常见的方法,并且应该工作得很好。
发布于 2013-05-18 18:31:48
无法直接查询当前存储在union中的类型。
https://stackoverflow.com/questions/16623226
复制相似问题