C++ - 有一个类型能够容纳它 children

C++ - Have a type be able to hold it's children

我有一个设备类型的链表:

Node<Device> list = new Node<device>(device);

并且 Device 派生了 classes:

而且我需要我的列表能够容纳每个派生的 class 设备。

我该怎么做?

注意:如果我向列表发送 Aerobic_Device,它只是动态转换为设备,这会丢失数据。

编辑:

我更改了我的程序的所有逻辑以使用指针,现在列表是:Node<Device*> - 它仍然将所有内容转换为设备类型。 现在,正如许多人建议的那样,我将其切换为 Node<std::unique_ptr<Device>>,但这只会引入很多很多错误。

使列表成为 Device* 类型(注意指针)。

Node<Device*> list;

然后,声明派生类型的对象(PowerDeviceAerobicDevicePowerAerobicDevice)并将它们放入列表中。

这样您就可以利用运行时多态性的强大功能。

或者,您可以(并且应该)使用智能指针而不是原始指针来自动处理内存:

std::unique_ptr<Device> pDevice= std::make_unique<PowerDevice>(...);
// put into list
std::unique_ptr<Device> aDevice= std::make_unique<AerobicDevice>(...);
// put into list
std::unique_ptr<Device> paDevice= std::make_unique<PowerAerobicDevice>(...);
// put into list

您不能按值存储对象并同时具有多态行为。您可以通过(最好是智能)指针存储您的对象:

Node<std::unique_ptr<Device>> list;