- 3
- 0
- 约4.1千字
- 约 8页
- 2021-04-12 发布于天津
- 举报
NS2 中添加 OTcl 与 C++ 之间的连接
翻译自
NS by Example ,见笑
原文地址:
原文地址:
/NS/linkage.html
图 18
1.将 C++ 类导出至 OTcl
假定你已经使用 C++ 创建了一个新的网络对象类, 比如继承 自 Agent 类的 MyAgent ,并且你想在 OTcl 中创建该对象的 实例。为此,你必须定义一个继承自 TclClass 的连接对象, 比如 MyAgentClass 。该连接对象用于创建一个有着特定名 称(如该例的 Agent/MyAgentOtcl )的 OTcl 对象,并且在
OTcl 对象和 C++ 对象(如该例中的 MyAgent )之间创建连 接。并且在 C++ 对象的 create 成员函数中指定了实例的开始 过程( launching procedure )。
2.将 C++ 变量导出至 OTcl
假设你的新的 C++ 对象 MyAgent 中有两个参数变量,比如
my_var1 和 my_var2 ,这两个变量必须够够通过使用 OTcl
模拟脚本来很容易地进行配置(或改变) 。为此,你应当对
C++ 类中的每个你想导出的变量使用绑定函数。绑定函数在 对应的 OTcl 对象类(如 Agent/MyAgentOtcl )中使用给定 的名字 (第一个参数) 创建新的成员变量, 并且建立在 OTcl
变量和 C++ 变量(变量的地址通过第二个参数确定)之间的 双向绑定。 图 19 显示了怎样对图 18 中的两个变量 my_var1
和 my_var2 进行绑定。
19
注意,为了在对象的实例被创建时建立绑定,绑定函数应放 置在 MyAgent 的构造函数内。 NS 支持 4 种不同的绑定函数, 适用于如下 5 种不同的变量类型:
- bind(): 浮点型和整型变量
- bind_time(): 时间变量
- bind_bw(): 带宽变量
- bind_bool(): 布尔变量 通过这种方法,使用 OTcl 脚本来设计并进行模拟的用户可 以对使用 C++ 实现的网络组件中的可以配置的参数 (或者变 量值)进行访问或者改变。注意,强烈建议无论何时导出 个 C++ 变量,都应当同时在 ns-2/tcl/lib/ns-lib.tcl 中设置该变 量的默认值。否则,当创建新对象的实例时会有警告信息。
3 .将C++对象控制命令导出至 OTcl
C++ 对象的些变量之外,你可能还想让 OTcl 得到你的C++ 对象的控制权。这可以通过定义你的 C++ 对象(例如,
C++ 对象的
些变量之外,你可能还想让 OTcl 得到你的
C++ 对象的控制
权。这可以通过定义你的 C++ 对象(例如,
MyAgent )的
command 成员函数来实现。 该成员函数充当 OTcl 命令的解 释器的角色。事实上,在 C++ 对象的 command 成员函数中 定义的 OTcl 命令看起来与相应的展示给用户的 OTcl 对象的 成员函数相同。图 20 是一个一个对图 18 中的 MyAgent 对 象的 command 成员函数的定义例子。
图 20
当匹配 MyAgent 对象的 OTcl 影像对象的实例在 OTcl 内被 创建(例如,使用了 set myagent [new Agent/MyAgentOtcl]
命令),并且用户试图调用该对象的成员函数时(例如,使
用 $myagent call-my-priv-func ), OTcl 会在 OTcl 对象中搜
索给定的成员函数名。如果给定的成员函数名未能找到,那
么将会调用 MyAgent::command来以#8220; 参数名 /参数值
么将会调用 MyAgent::command
来以#8220; 参数名 /参数
值#8221; 的形式传递被调用的
OTcl 成员函数的参数的名
称和参数值。如果在 command
成员函数中存以在被调用的
OTcl 成员函数的名称定义的操作,
那它执行请求并返回结果。
如果不存在, command 成员函数的祖先会被依次递归调用, 直到发现该名称。如果在任何一个祖先中都未能发现该名称,
则返回给 OTcl 对象一个错误信息, 并且该 OTcl 对象显示给 用户一条错误信息。通过这种方式,用户可以在 OTcl 内控 制 C++ 对象的行为。
4.从 C++ 中执行 OTcl 命令 如果你用C++实现了一个新的网络对象, 你或许从C++对象 中执行一条 OTcl 命令。图 21 显示了图 18 中的 MyAgent
对象的 MyPrivFunc 成员函数的实现。 它让 OTcl 解释器打印 出私有成员变量 my_var1 和 my_var2 的值。
为了从 C++ 中执行一条
您可能关注的文档
最近下载
- 川教版六年级《生命生态安全》下册第3课《生命只有一次》课件.pptx VIP
- 急性缺血性脑卒中识别与早期治疗PPT课件.pptx VIP
- 2025年邵阳学院辅导员考试参考题库附答案.docx VIP
- 2025年高校教师资格证题库含答案(考试直接用).docx VIP
- horiba mexa 600s不透光烟度计horiba mexa 600s-1--中文翻译--20140928.pdf VIP
- 五年级下册语文必背内容汇总.docx
- 职业技术学院数控技术专业技能考核题库.pdf VIP
- 眼视光公共卫生学体系构建与实施策略.pptx VIP
- 《社区居家适老化环境设计》健康养老专业全套教学课件.pptx
- 食品安全控制技术课件.pptx VIP
原创力文档

文档评论(0)