c++ - 型铸结构件

标签 c++ c visual-c++

我有结构(A),它需要另一个结构(B)作为成员。 现在我想要结构 C 作为 A 的成员而不是 B。 B和C都是同一类型

typedef struct
{
 int a;
 B b;
}A

typedef struct
{
 int a;
}B

typedef struct
{
 int a;
}C

如何将结构 C 指定为成员而不是 B。如何进行类型转换 请帮忙

最佳答案

在不知道为什么要这样做的情况下,很难推荐策略。不过,这里有一些选项。

选项 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 包含一个 void*(不推荐,您将失去所有类型安全性)。 (C/C++)

struct A 
{
  int a;
  void* foo; // you can now assign any pointer to foo :-S
};

关于c++ - 型铸结构件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4452303/

相关文章:

visual-c++ - 忽略 crt 库的特定库?

windows - Boost + Visual Studio 2010 + Windows 平台 SDK 7.1

c++ - 如何让 QLayouts 正确展开?

c - 如何以编程方式转换音频(diy)?

c - 升级到 Python3 - C 数据类型

c - C 转换字符 %.8f 有什么问题?

c - 在 WinAPI 中重置信号量计数器

c++ - 是否可以在不锁定或提供 future 的情况下进行查找或创建?

c++ - 如何改变MFC PropertySheet的字体

c++ - 以下单例实现线程安全吗?