NS2笔记 之 OTcl与C++

最近一直在理解NS2所谓的分裂对象模型,想知道ns是如何通过Otcl来创建C++对象的。下面把学习的一些心得总结一下。

Otcl其实就是面向对象的tcl,这和C++和C的关系是一样的。

Otcl和Tcl一样是可嵌入的,它提供了C的API接口,我们可以通过这些接口来访问Otcl对象。主要的接口描述见~/otcl/otcl.h文件

Otcl的基类是Object,所有的类都是从Object派生出来的。该类包含了对象的初始化和销毁过程,添加类成员函数和成员变量及其查询的一些方法。归纳如下:

Class 创建一个对象
Destroy 销毁一个对象
proc 定义Tcl对象方法
set 定义Tcl对象变量
instvar 绑定实例变量


有关Otcl的详细语法可见:

http://bmrc.berkeley.edu/research/cmt/cmtdoc/otcl/


下面开始来看看是怎么通过OTcl来操纵C++对象的:

一、C++对象的创建

NS2采用的分裂对象模型,即每个C++的类都有一个Otcl类与之相对应。NS2中所有类的基类是TclObject,而Otcl中的基类则为SplitObject。下面首先看一下SplitObject这个类的定义(~/tclcl.*/Tcl-object.tcl):


Class SplitObject
SplitObject set id 0

SplitObject instproc init args {
	$self next
	if [catch "$self create-shadow"text" > $args"] {
		error "__FAILED_SHADOW_OBJECT_" ""
	}
}
SplitObject instproc destroy {} {
	$self delete-shadow
	$self next
}

由于每一个Otcl对象的创建都要调用其init过程,因此所有继承于SplitObject的Otcl类的初始化最终都会调用到SplitObject的init()这个instproc。

从上面代码中可以看到,init()实际上是调用了一个叫create-shadow的函数,这个函数就是用来创建C++对象的,这在后面会分析到。

同时,SplitObject也重载了destroy()函数,调用了一个叫delete-shadow的方法,顾名思义,也就是销毁相应的C++对象。

注意:Otcl并不会像C++那样会

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值