在 C++ 中,我有一个基类 Packet,然后是很多子类 APIPacket、DataIOPacket 等。现在我想存储一个传入的数据包,因为我不知道类型,所以我将它存储在一个变量中:
Packet packet;
packet = DataIOPacket();
但是现在 DataIOPacket 有一个函数 getAnalogData(); 我不能这样做:
packet.getAnalogData();
由于包没有这个功能。在java中我认为这是可能的,因为存储在数据包中的对象的实际类型没有丢失(这是正确的吗?)。但是在 C++ 中,我的 DataIOPacket 被缩小为 Packed 并丢失了尚未在 Packet 中声明的功能。
您可以在 Packet 中为每个孩子的每个功能创建一个虚拟功能。但对我来说,这意味着 Packet 中有很多函数在大多数情况下不应该被调用。在 APIPacket 上调用 getAnalogData() 没有用。
这个问题是如何解决的?我找不到答案,但我觉得很多人必须遇到它。
您可以通过类型转换回 DataIOPacket 和 APIPacket 来做一些事情,但这似乎也不是一个干净的解决方案。
是否有图书馆可以解决我的问题?
Rgds,
罗尔