2

有人可以告诉我并提供一个代码示例,说明是否可以在不使用 C++ 继承的情况下创建一个可以容纳任何类型对象的数组?我还没有为它编写任何代码,但例如,如果我有 2 个类:RangedWeap 和 MeleeWeap,有没有办法在不使用继承的情况下将这些对象存储在同一个数组中?

4

3 回答 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何时访问,以了解是否应该访问ab在每个元素中访问。

注意:您的对象应该是POD,除非您根据@chris使用 C++11 。

于 2012-07-17T17:56:26.977 回答