我只是想知道,如果我有一个接受包含其中的union的结构的函数,我怎么能知道该联合的内容:
struct command{
int *input;
int *output;
union{
char **word;
struct command *subcommand;
} u;
};
功能:
void readCommand(command cInput){
if(cInput.u is char) print the content of array of array of char
else readCommand(cInput.u); //make a recursive call
}
有什么建议吗?谢谢
注意:我无法更改struct命令的内容。
答案 0 :(得分:0)
你做不到。这就是工会的本质。如果需要,必须在结构中嵌入union,并在结构中放置一个类型指示符。
答案 1 :(得分:0)
你不能;您必须假设基础数据是什么或有权访问其他信息,这些信息可以告诉您当前的基础类型是什么。它只对提取适当的基础类型有效。
答案 2 :(得分:0)
如果您从黑盒子中收到此类型的对象而没有关于此对象的任何信息,则在不更改struct command
结构的情况下无法执行此操作。
答案 3 :(得分:0)
对于工会,你总是需要某种鉴别器来表明哪个特定的对象存在于联盟中。它可以是枚举或其他值,告诉您对象的性质。
例如:
struct command{
int *input;
int *output;
int type; // <-- e.g. this value is the union discriminator; 1 => word, 2 => subcommand
union{
char **word;
struct command *subcommand;
} u;
};