【发布时间】:2011-11-10 20:53:58
【问题描述】:
假设我有许多 C 结构,我希望使用一组特定的函数对其进行操作。
我想知道以下方法是否合法:
typedef struct Base {
int exampleMember;
// ...
} Base;
typedef struct Foo {
Base base;
// ...
} Foo;
typedef struct Bar {
Base base;
// ...
} Bar;
void MethodOperatesOnBase(void *);
void MethodOperatesOnBase(void * obj)
{
Base * base = obj;
base->exampleMember++;
}
在示例中,您会注意到 Foo 和 Bar 结构都以 Base 成员开头。
而且,在MethodOperatesOnBase 中,我将void * 参数转换为Base *。
我想将指向Bar 的指针和指向Foo 的指针传递给此方法,并依赖结构的第一个成员是Base 结构。
这是可以接受的,还是我需要注意一些(可能是特定于编译器的)问题? (比如某种包装/填充方案会改变结构的第一个成员的位置?)
【问题讨论】:
-
有什么理由不只使用 C++?
-
是的。但要点很好。我正在尝试为我的项目中有限数量的结构模仿一个超级简单的继承机制。
-
我明白你在说什么,但我不能为这个项目。
-
Is this homework?离开学校 10 年了,但谢谢。哈哈 -
@Jonathan Grynspan:这是一个合理的问题。假设你的程序有 10,000 行长,并且用 C 语言编写。那么你有大约 100 行需要做这个结构双关语的地方。在这种情况下,花更多的精力来保持整个程序在 C 中的兼容性可能是值得的。
标签: c