在 Omnet++ 中将非 cObject 数据(自定义 class)添加到数据包中

Adding non-cObject data (custom class) into a packet in Omnet++

我正在尝试创建数据包并附加自定义对象。我通读了手册并尝试遵循他们的建议,但我被卡住了。

根据手册:非 cObject 数据可以通过将它们包装到 cObject 中附加到消息,例如包装到专门为此目的设计的 cMsgPar 中。

cMsgPar 具有函数:setObjectValue(),因此我尝试通过以下代码添加 class:

// b is a pointer to a custom object
    auto packet = createPacket("Msg");

    packet->addPar("data");
    packet->par("data").setObjectValue(b);

但是我收到 setObject 值函数的 'no matching function for call' 错误。我检查了函数声明,它是:

cMsgPar &   setObjectValue (cOwnedObject *obj)

这让我回到原点。尝试将我的自定义 class 转换为 Omnet 可接受的内容以发送到我网络中的其他节点。

如有任何帮助,我们将不胜感激。

在 OMNeT++ 中通过消息携带自己的 类(对象)的推荐方法是将其添加到消息的定义中。例如:

cplusplus {{
#include "MyClass.h"  // assuming that MyClass is declared here 
typedef MyClass *MyClassPtr;
}};

class noncobject MyClassPtr;

packet MyPacket {
    int x;
    MyClassPtr ptr;
}

参考:OMNeT++ Simulation Manual - 6.6 Using C++ Types

这就是我如何做的一个简单的解决方案。 Omnet++ 已经有很多方法可以做到这一点。

msg->addPar("preamble");
msg->par("preamble").setLongValue(0b01010101010101);
send(msg,"phyout");

希望对大家有所帮助