你有两个结构。一个是“A”类型,另一个是“B”类型。 “B”类型的结构体中有一个“A”类型的结构体。所以像这样:
struct A {
void print_stuff(A * a){ puts("From A"); }
};
struct B {
A a_part;
char * s;
void print_stuff(B * b){
printf("From B\n\t%s\n", b->s);
}
};
B * B_new(char * str) {
B * b = (B*)malloc(sizeof(struct B));
b->s = strdup(str);
return b;
}
您希望能够调用 struct B 的“print_stuff”函数,即使使用如下代码:
A * aptr = (A*) B_new("foo");
aptr->print_stuff(aptr);
您不得使用继承、C++ 容器或类。结构 B 必须有 a_part。
您将如何编写代码,以便无论指针的类型如何,都调用正确的 print_stuff 函数(在这种情况下,如果指向 B 类型结构的指针被强制转换为 A*,您如何保证B 中的 print_stuff 函数被调用)?
最佳答案
您可以将 print_stuff
设为函数指针,但随后您需要手动将其连接到正确的函数。但在本例中,您只是复制 C++ 继承机制,因此毫无意义。
A
对象无法自动知道它包含在何处,或者是否包含它。
所以底线是,只使用 C++ 继承。
关于c++ - 嵌入结构和正确的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840704/