ns2中 實現 c++ 類的靜態成員變量的綁定過程

態變量的綁定過程驗證

                                                   作者: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章