我需要帮助将cMessage转换为cPacket类型的MsgData。
我的MsgData是我创建的消息:
packet MsgData {
string origem;
int cont;
double payload;
double timestamp;
}
我使用了static_cast函数,但它不起作用。我尝试使用dynamic_cast并且也不起作用。
我的代码:
void UdpTrafficRedirect::retransmitDataMessage(cMessage *msg) {
ASSERT(check_and_cast<MsgData *>(msg));
MsgData *trafficMsg = static_cast<MsgData *>(msg);
}
有谁知道我该怎么做?
谢谢!
答案 0 :(得分:1)
你应该尝试直接使用check_cast&lt;&gt;(),如果你的数据包不是预期类型之一,它会产生错误,就像ASSERT一样。
var response = client.DownloadString("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Neuschwanstein%20Castle&redirects="); ;
var responseJson = JsonConvert.DeserializeObject<RootObject>(response);
var firstKey = responseJson.query.pages.First().Key;
var extract = responseJson.query.pages[firstKey].extract;
答案 1 :(得分:1)
ASSERT
不是必需的,因为check_and_cast
实际上也是如此。不过,我建议使用dynamic_cast
进行额外检查。
void UdpTrafficRedirect::retransmitDataMessage(cMessage *msg) {
if (dynamic_cast<MsgData *>(msg)) {
MsgData * trafficMsg = check_and_cast<MsgData *>(msg);
int a = trafficMsg->getCont();
} else {
EV << "Message " << msg << " is not a MsgData packet" << endl;
// other checking of msg
}
}