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
作者: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
相关文章推荐
- C++ 实现Mutex(底层用win32) 和 C++中析构过程 和常量性的大坑
- 使用Visual C++ Extensions实现ADO数据绑定
- c++中动态绑定的技术实现
- C++中的property库的设计与实现过程(一)
- C++中的property库的设计与实现过程(二)——如何为属性指定get_和set_函数?
- C++实现适配器模式(手动实现绑定功能)
- oracle ASM安装过程中UDEV实现磁盘绑定
- 我认为是最简单的c++实现线性表中链表相关过程
- C/C++——程序实现过程之编译、链接和执行
- C++引用的底层实现&引用解绑定
- javascript实现动态模态绑定grid过程代码
- CEF3实现js与C++交互功能, Render进程中OnContextCreated绑定与OnWebKitInitialized的js扩展无法回调
- paip.提高工作效率--数据绑定到table原则和过程Angular js jquery实现
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- 创建堆,堆排序的详细实现过程,C++完整代码
- C++ 初始化常量引用时内部的实现过程
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- C++中动态类型与动态绑定、虚函数、运行时多态的实现
- 如何使用cocos的自动绑定工具实现lua调用c++的类