Omnet/Inet :如何访问 class/submodules 以获取变量值
Omnet/Inet : how to access class/submodules to get variables values
在我的模拟中有一个移动节点由来自 inet 框架的以下组件组成:
现在我正在研究 UdpApp
,它是 UDPVideoStreamCli.cc
,它也是 inet 框架作为示例 udp 应用程序之一提供的。
现在你可以从图像中看到,我必须访问 lisp 模块(它是 LispRouting.cc
的一个实例),因为我必须读取一些值或调用一些 public 方法class...我该怎么做?我只知道我必须从
开始
getParentModule()->getSubmodule();
但我不知道如何继续...你能帮忙吗?
(LispRouting *)getParentModule()->getSubmodule("lisp")
会成功的。务必检查返回的指针是否不为空。
通常这是糟糕的设计,因为它硬编码了 LispRouting 模块的名称和相对位置。 naming/architecture 中的任何更改都将导致崩溃。
一个合适的设计是创建一个参数来指定 lisp 子模块的 name/path(具有默认值),然后使用
#include "inet/common/ModuleAccess.h"
...
LispRouting *lr = getModuleFromPar<LispRouting>(par("lispModule"), this);
然后在模块的NED文件中添加一个参数:
string lispModule = default("^.lisp");
意味着您可以找到 lisp 模块的默认位置是:向上一层,然后找到名为 "lisp" 的子模块。这是一个更好的模式,因为用户以后可以在不破坏代码的情况下重新配置 lisp 模块的 name/placement。
在我的模拟中有一个移动节点由来自 inet 框架的以下组件组成:
现在我正在研究 UdpApp
,它是 UDPVideoStreamCli.cc
,它也是 inet 框架作为示例 udp 应用程序之一提供的。
现在你可以从图像中看到,我必须访问 lisp 模块(它是 LispRouting.cc
的一个实例),因为我必须读取一些值或调用一些 public 方法class...我该怎么做?我只知道我必须从
getParentModule()->getSubmodule();
但我不知道如何继续...你能帮忙吗?
(LispRouting *)getParentModule()->getSubmodule("lisp")
会成功的。务必检查返回的指针是否不为空。
通常这是糟糕的设计,因为它硬编码了 LispRouting 模块的名称和相对位置。 naming/architecture 中的任何更改都将导致崩溃。
一个合适的设计是创建一个参数来指定 lisp 子模块的 name/path(具有默认值),然后使用
#include "inet/common/ModuleAccess.h"
...
LispRouting *lr = getModuleFromPar<LispRouting>(par("lispModule"), this);
然后在模块的NED文件中添加一个参数:
string lispModule = default("^.lisp");
意味着您可以找到 lisp 模块的默认位置是:向上一层,然后找到名为 "lisp" 的子模块。这是一个更好的模式,因为用户以后可以在不破坏代码的情况下重新配置 lisp 模块的 name/placement。