您的位置:首页 > 编程语言 > C语言/C++

ns2中 实现 c++ 类的静态成员变量的绑定过程

2007-05-20 16:30 288 查看
态变量的绑定过程验证
作者:lzqlgq
特别感谢:robin2046
[注意]本次实验使用了AODV代码测试,红色代码为加入代码,实现平台为 Fedor core 6、ns-2.31

没用实验过 就不能证明方法的正确性,所以这里我测试一下静态变量的绑定方法,请参考ns manual 3.5.1章节

第一: 在 aodv.h中为类AODV加入 public类型变量 static int mylen;

这里不可以 初始化mylen ,because ISO C++ forbids in-class initialization of non-const static member ‘mylen’

第二:在aodv.cc上方加入 int AODV::mylen=0;

在aodv.cc中为AODVclass类加入两个函数

static class AODVclass : public TclClass {

public:

AODVclass() : TclClass("Agent/AODV") {}

TclObject* create(int argc, const char*const* argv) {

assert(argc == 5);

//return (new AODV((nsaddr_t) atoi(argv[4])));

return (new AODV((nsaddr_t) Address::instance().str2addr(argv[4])));

}

virtual void bind();

virtual int method(int argc,const char* const* argv);

} class_rtProtoAODV;

在aodv.cc中添加两个函数的 实现

void AODVclass::bind()

{

TclClass::bind();//注意,向上循环调用

add_method("mylen");

}

int AODVclass::method(int ac,const char* const* av)

{

Tcl& tcl=Tcl::instance();

int argc=ac-2;

const char* const* argv=av+2;

if(argc==2)

{

if(strcmp(argv[1],"mylen")==0)

tcl.resultf("%d",AODV::mylen);

return(TCL_OK);

}

else if(argc==3)

{

if(strcmp(argv[1],"mylen")==0)

AODV::mylen=atoi(argv[2]);

return (TCL_OK);

}

return TclClass::method(ac,av);

}

第三:进入命令行,在目录ns-2.31下 使用命令make重新编译
第四: 此时method实现的命令mylen 被绑定到类AODV上,和command实现的方法一样,只不过是参数传递个数不同
第五:测试,建立文本test.tcl 内容如下
1 //test.tcl
2 puts [Agent/AODV mylen]
3 Agent/AODV mylen 8
4 puts [Agent/AODV mylen]

第六: ns test.tcl 结果如下
0
8
证明了对静态变量的绑定成功!
2007-5-20 HITSZ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: