Динамическая отправка сообщений в OmNet ++ - PullRequest
0 голосов
/ 08 декабря 2018

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

...