Omnet/Inet:如何访问类/子模块以获取变量值

Sag*_*usA 2 inet omnet++

在我的模拟中,有一个由inet框架中的以下组件组成的移动节点:

现在我工作的UdpAppUDPVideoStreamCli.cc它也是由INET框架作为例子给出UDP应用之一.

现在您可以从图像中看到我必须访问lisp模块(这是一个实例LispRouting.cc),因为我必须读取一些值或调用该类的一些公共方法... 我该怎么?我所知道的是我必须从头开始

getParentModule()->getSubmodule();
Run Code Online (Sandbox Code Playgroud)

但后来我不知道怎么回事......你能帮忙吗?

Rud*_*udi 7

(LispRouting *)getParentModule()->getSubmodule("lisp")
Run Code Online (Sandbox Code Playgroud)

会做的.一定要检查返回的指针是否为空.

通常这是糟糕的设计,因为它硬编码LispRouting模块的名称和相对位置.命名/体系结构的任何更改都将导致崩溃.

一个合适的设计是创建一个参数,指定lisp子模块的名称/路径(默认值),然后使用

#include "inet/common/ModuleAccess.h"
...
LispRouting *lr = getModuleFromPar<LispRouting>(par("lispModule"), this);
Run Code Online (Sandbox Code Playgroud)

然后将一个参数添加到模块的NED文件中:

string lispModule = default("^.lisp");
Run Code Online (Sandbox Code Playgroud)

意味着你可以找到lisp模块的默认位置是:向上一级,然后找到名为"lisp"的子模块.这是一个更好的模式,因为用户以后可以在不破坏代码的情况下重新配置lisp模块的名称/位置.