c++ - 嵌入结构和正确的函数调用

标签 c++ c struct

你有两个结构。一个是“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/

相关文章:

c++ - 结构的选择排序

具有非连续布局的 C 位域元素

c - stdlib qsort 对指向结构的指针数组进行排序

c++ - QT 5.7分析音频输出

c - 这段代码我哪里出错了

c - libuv:uv_tcp_connect 返回的 int 是什么?

c# - 在 C# 中调用 C 函数

c++ - 这个opencv代码有什么问题

c++ - 类的对象数组

c++ - G++ 不接受 C++ 中的内联构造函数