2

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

现在,我正在研究inet 框架也提供的UdpAppwhich UDPVideoStreamCli.ccis 作为示例 udp 应用程序之一。

现在,正如您从图像中看到的那样,我必须访问 lisp 模块(它是 的一个实例LispRouting.cc),因为我必须读取一些值或调用该类的一些公共方法......我该怎么做?我只知道我必须从

getParentModule()->getSubmodule();

但后来我不知道如何继续......你能帮忙吗?

4

1 回答 1

8
(LispRouting *)getParentModule()->getSubmodule("lisp")

会成功的。一定要检查返回的指针是否不为空。

通常这是一个糟糕的设计,因为它硬编码了 LispRouting 模块的名称和相对位置。命名/架构的任何更改都会导致崩溃。

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

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

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

string lispModule = default("^.lisp");

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

于 2015-07-15T09:53:17.220 回答