OmNet ++中的动态消息分派

时间:2018-12-08 10:27:11

标签: c++ polymorphism omnet++ visitor dynamic-dispatch

.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 ++,因此在此先感谢您的帮助或提示。

0 个答案:

没有答案