我有结构(A),它采用另一种结构(B)作为成员。 现在我想要结构C作为A的成员而不是B. B和C都属于同一类型
typedef struct
{
int a;
B b;
}A
typedef struct
{
int a;
}B
typedef struct
{
int a;
}C
如何将struct C指定为成员而不是B.如何进行类型转换 请帮忙
答案 0 :(得分:1)
C和C ++是静态类型语言。你不能这样做。如果你宣称某些东西是苹果,它将一直保持苹果直到时代结束。
答案 1 :(得分:1)
虽然它们看起来是相同的类型(并且在这个简单的情况下是相同的),但编译器认为它们是不同的类型。这对于更复杂的情况或在C ++中是有意义的,其中类型系统比纯C更复杂。
你通常不应该依赖编译器技巧或hackery来做这种分配。相反,做得恰当。直接指定字段,或者为了简化代码,可以在这些行中创建辅助函数:
void ASetBWithC(A *a, C c) {
assert(a != NULL);
a->b.a = c.a;
}
C ++还有一个赋值运算符,您可以重载它来为您完成工作(而不是创建一个命名的辅助函数),但我怀疑这超出了您目前的舒适度。
答案 2 :(得分:1)
不知道为什么要这样做,很难推荐一个策略。这里有几个选项。
选项1:使用模板。 (仅限C ++)
template <type T>
struct A
{
int a;
T* t;
};
struct Foo
{
int a;
};
struct B : public Foo
{
};
struct C : public Foo
{
};
struct A<Foo> A_foo;
struct B;
struct C;
A_foo.t = &B; //OK! This can now take pointer to any class that extends Foo.
A_foo.t = &C; //OK!
选项2:使结构A包含空* *(不推荐,您将失去所有类型的安全性)。 (C / C ++)
struct A
{
int a;
void* foo; // you can now assign any pointer to foo :-S
};