NS2學習筆記2 octl與c 物件的關聯

2021-07-23 08:47:59 字數 1436 閱讀 7754

以下總結的內容基本上來自於ns2筆記 之 otcl與c++ 和[譯] ns2中otcl 和c++ 的連線 (一),沒有基礎可以先看下這兩篇文章。

首先我們要清楚在ns2的設計中,連線tcl和c++架構的是tclcl類,這個tclcl類,包括六種主要的類,tcl、tclobject、tclclass、instvar、tclcommand   、embeddedtcl。他們都是c++**。主要作用如下:

1 tcl 類:提供從編譯體系訪問解釋體系的方法(method).

2 instvar 類:負責把兩種體系中的成員函式對應的繫結。

3 tclobject 類:是編譯體系中所有c++模擬物件的基類。

4 tclclass 類:將解釋體系中的類名一一對應於編譯體系中的對應類名。

5 tclcommand 類:提供從解釋體系訪問編譯體系的全域性方法。

6 embeddedtcl 類:把otcl 指令碼轉化為c++**。

這一節我們主要關注的是tclclass和tclobject。

將**模型講的比較好的是[譯]ns2中otcl類和c++類的連線(三) ,尤其是裡邊的幾個函式、類的呼叫流程圖,很清晰明了。

因為ns2中的**模型機制,我們如果想定義乙個c++中的tclobject類,同時想在ns的使用者介面中用tcl指令碼使用,必須為這個tclobject建立乙個影子octl類,建立這種對映關係是通過tclclass類來完成。因為tclclass是乙個純虛類,所以我們需要同時定義乙個繼承自tclclass類的靜態類,在這個類中我們完成編譯物件同解釋物件的類名一一對應,同時為解釋物件中的類新增兩個成員函式,在實際tcl指令碼的執行過程中,解釋物件的這兩個成員函式實際上會執行編譯物件的成員函式。其中乙個成員函式就會建立並獲取編譯類物件的指標,這樣在建立解釋物件時同時也完成了編譯物件的建立,這個過程是通過這個定義的個tclclass靜態類來完成的。

實際上在指令碼建立otcl物件的時候,首先會用到new這個命令,new這個命令會呼叫,create這個命令,就是建立octl解釋類物件,建立時會執行解釋類物件的建構函式init,在init中會呼叫create-shadow這個函式,進而就建立了編譯類物件並完成了類名一一對應。這個過程中涉及到一些細節,詳細請見部落格,也會用到tcl類,大體流程就是這個樣子。

其實在tclclass的bind函式中,有向otcl註冊物件新增兩個函式create-shadow和delete-shadow的**,感覺這兩句**才是有意思,如何實現呢,就是在用tcl指令碼命令時,會呼叫定義的tclclass類內create-shadow和delete-shadow函式,很神奇。

貼幾張學習時的筆記,**不是很清楚,不過內容也沒什麼價值,看上面轉的部落格就行了。

NS2學習筆記

國慶假期用來研究ns2,基於socket的網路程式設計和演算法 現在看的差不多了,每天陸續寫些筆記,用來複習,也用來交流 本人也是初學者,如果有什麼錯誤,希望也可以指出 讀完了這個再去讀ns2的手冊,這個對於高階式相當重要的,而且因為有中文版的,需要的也可以留郵箱。ns2的安裝,建議安裝在linux...

NS2學習 看懂trace檔案(2)

ns use newtrace 使用新格式。語句在 ns trace all tracefd 之前 new trace格式定義 n node property i ip level packet information h next hop information m mac level packe...

NS2學習筆記1 NS開發架構與C 的開發方法

新手,學習ns2,爭取把原理搞懂。目前還只能做知識的搬運工,加工整理,盡量做到每乙個問題的清晰溯源。1.為什麼採用兩種語言來編寫?以下一段 譯 ns2中otcl 和c 的連線 一 看來還是老外寫的書比較深入透徹。三種方式來開發c 程式,這才是真正的答案好不好,至於c 執行快,tcl解釋語言修改快只是...