c++ - 在 vector 结果记录器中记录元组

标签 c++ omnet++

我在 OMNeT++ 4.4 中运行模拟,其中我的节点发出一个结果,该结果本质上是一个元组。元组的值是相互依赖的,所有节点都会发出它们;即,在单个 simtime 中发出了几个这样的元组。元组不能被“压缩”为单个 double 值。

我想将这些元组记录在一个 vector 中。有没有办法发出用于统计收集的数据结构并将其记录在 OMNeT++ 创建的 *.vec 文件中?我不关心 NED 文件中可用于此特定信号的统计函数。

举个简单的例子,假设我有

typedef boost::tuple<boost::DateTime, bool, Unit::Watt, Unit::VAr> MyTuple;

某处作为我要发出的信号的数据类型。有没有办法拥有

MyTuple myTuple( /* ... data ... */ );
emit(mySignal, myTuple);

在我的源代码中并将其记录在规则的 .vec 结果文件中,例如:

vector 1 MyNodeName MyResultVectorName TV
1  14.126 2013-01-22T23:22:19+10:00 true 125300 12000

如果不可能,仍然使用 OMNeT 的信号机制但自己创建输出文件的最佳方法是什么?

最佳答案

默认情况下 OMNeT++ 不能保存元组(因为内置工具无论如何都不能处理它),但是信号可以携带一个 cObject ,这与标量值的传输方式类似。从 cObject 派生你的元组,你将能够用信号发射它。显然,您还必须编写并注册一个可以处理给定数据类型并写入文件的 ResultRecorder(派生自 cResultRecorder)。

关于c++ - 在 vector 结果记录器中记录元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505614/

相关文章:

c++ - C++ 项目中的两个 main() 无法构建

c++ - 与 Windows(和 Windows Embedded CE)中的 CLOCK_MONOTONIC 类似的功能

c++ - 调试来自同一代码库的运行时差异

omnet++ - 如何在 MyVeinsApp 应用程序中包含从 DemoSafetyMessage 扩展的新消息?

c++ - OMNeT++中不同类型数据包之间的冲突

c++ - 使用 C++ 和标准 C 库以异步方式实现套接字连接读取超时处理的最佳方法

c++ - 使用 SCons 定义 C++ 预处理器宏

c++ - := versus = error: undefined reference to qMain(int, 字符**)

omnet++ - OMNET++,如何在 VEINS 中的两辆车之间传递消息?

c++ - 使用 INET 扩展模块未正确执行覆盖代码