有人可以告诉我并提供一个代码示例,说明是否可以在不使用 C++ 继承的情况下创建一个可以容纳任何类型对象的数组?我还没有为它编写任何代码,但例如,如果我有 2 个类:RangedWeap 和 MeleeWeap,有没有办法在不使用继承的情况下将这些对象存储在同一个数组中?
问问题
1046 次
3 回答
7
如果你想存储对象,没有. 这样做的原因是数组将对象存储在连续的内存中,并且每个存储对象的大小都是相同的。这不一定适用于不同的类型。
有一种丑陋的方法来存储void*
,但那将是存储指针,而不是对象。此外,这将毫无用处,因为所有类型信息都丢失了。您到底如何确定void*
指向的内容(假设您没有基类)?
于 2012-07-17T17:54:48.143 回答
2
Boost.Any将启用此功能,但如果您愿意,它(可能?)在后台使用继承。
于 2012-07-17T17:56:40.033 回答
0
您将很难区分这两个对象,但鉴于您有办法,您可以使用union
:
struct A
{
int type; // to distinguish
...
};
struct B
{
int type;
...
};
union AB
{
int type;
A a;
B b;
};
AB array[] = {<whatever>};
稍后,您必须检查type
何时访问,以了解是否应该访问a
或b
在每个元素中访问。
注意:您的对象应该是POD,除非您根据@chris使用 C++11 。
于 2012-07-17T17:56:26.977 回答