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