これはこのフォーラムでさまざまな方法で尋ねられることは知っていますが、(他のさまざまな投稿を読んだ後) 自分が何をする必要があるかについて、最善の方法をまだ理解できていません。そこで、さらにアドバイスを求めることにしました!
次のようなメッセージ クラス階層があります (ほとんどの詳細は省略します)。
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);
}
データを基本クラスとして見て、その型を決定し、それを必要な派生型に「モリモーフ」できる方法はありますか?
ありがとう、飼料