У меня есть другой тип сообщений в .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 ++, поэтому заранее спасибо за любую помощь или подсказку.
Задача ещё не решена.
Других решений пока нет …