我知道这个论坛上以各种方式提出了这个问题,但我仍然无法弄清楚我需要做什么的最佳方式(在阅读了其他各种帖子之后)。所以我决定寻求进一步的建议!
我有一个消息类层次结构,类似于(省略大部分细节):
class MsgBase
{
public:
uint8_t getMsgType(void);
protected: // So that derived classes can access the member
char _theMsgData[100];
}
class MsgType1 : public MsgBase
{
}
class MsgType2 : public MsgBase
{
}
所以会发生什么是我收到了一个消息数据块,我用它来创建我的消息。但是在我读出消息类型之前,我不知道要创建哪个消息。所以我最终得到:
MsgBase rxMsg(rxData);
if (rxMsg.getMsgType() == 1)
{
// Then make it a MsgType1 type message
}
else if (rxMsg.getMsgType() == 2)
{
// Then make it a MsgType2 type message
}
这是我坚持的一点。根据我的阅读,我无法从基础动态转换为派生。所以我目前的选择是实例化一个全新的派生类型(这似乎效率低下),即:
if (rxMsg.getMsgType() == 1)
{
// Now use the same data to make a MsgType1 message.
MsgType1 rxMsg(rxData);
}
有没有一种方法可以将数据视为基类,以便确定其类型,然后将其“变形”为所需的派生类型?
谢谢,饲料