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

现在我工作的UdpApp是UDPVideoStreamCli.cc它也是由INET框架作为例子给出UDP应用之一.
现在您可以从图像中看到我必须访问lisp模块(这是一个实例LispRouting.cc),因为我必须读取一些值或调用该类的一些公共方法... 我该怎么做?我所知道的是我必须从头开始
getParentModule()->getSubmodule();
Run Code Online (Sandbox Code Playgroud)
但后来我不知道怎么回事......你能帮忙吗?
(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模块的名称/位置.
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |