У меня есть другой тип сообщений в .msg
файле:
message BaseMsg
{
int instance;
}
message StartMsg extends BaseMsg
{
int request;
}
message LastVoteMsg extends BaseMsg
{
int ballot;
Vote vote;
}
Вот мой простой модуль (proposer.cc
файл):
void Proposer::handleMessage(cMessage *msg)
{
EV << "Received msg: " << msg;
StartMsg *startMsg = dynamic_cast<StartMsg *>(msg);
if (startMsg) {
tryNewBallot(startMsg->getInstance(), startMsg->getRequest());
return;
}
LastVoteMsg *lastVoteMsg = dynamic_cast<LastVoteMsg *>(msg);
if (lastVoteMsg) {
handleLastVoteMsg(lastVoteMsg);
return;
}
}
В настоящее время яиспользуя dynamic_cast
, но я уверен, что есть лучший способ.
Насколько я понимаю, мне нужен шаблон посетителя / двойной отправки, потому что полиморфизм проверяется во время компиляции.Если я прав, это требует помещения в сообщение метода, который будет вызывать handleMessage
с правильным типом, но так как класс .msg
обрабатывается OmNet определенным образом, я не уверен, что делать дальше.Я не очень хорошо разбираюсь в c ++, поэтому заранее спасибо за любую помощь или подсказку.