Re: [問題] 請教簡單問題 TCL 與 .cc 關係

看板Network_Sim作者 (天空快快黑)時間13年前 (2011/06/15 21:53), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《sysrq (從零開始)》之銘言: : ※ 引述《sysrq (從零開始)》之銘言: : : 標題: [問題] 請教簡單問題 TCL 與 .cc 關係 : : 時間: Wed Jun 1 18:28:18 2011 : : 請教一個簡單問題. : : 在 tcl 中有以下的 code, : : set peer($i) [new PeerApp/GnutellaApp $nodeid 0 0] : : 請問在 .cc 中 GnutellaApp , 傳入三值的 $nodeid, 0, 0 該如何找到? : : 我試著找了 .cc code 中的 function, 沒有找到類似有三個 input 的地方. : : 最類似的僅有 : : GnutellaApp::GnutellaApp(NodeAddr_t addr): PeerApp(addr) { : : 但裡面參數只有一個(NodeAddr_t addr). : : 請問我的觀念, 或是我找的方法有什麼錯誤嗎? : : 誠心請教. : : → kivava:這是tclcl的參數傳遞,要找TclClass或/lib下的.tcl指令 06/01 20:35 : 謝謝 kivava 回答. : 後來查了一下 .cc, : 有找到 TclClass : static class GnutellaAppClass: public TclClass { : public: : GnutellaAppClass(): TclClass("PeerApp/GnutellaApp") {} : TclObject* create(int argc, const char*const* argv) { : return (new GnutellaApp(atoi(argv[4]))); : } : }class_gnutellaapp; : 黃色字體應該就是 set peer($i) [new PeerApp/GnutellaApp $nodeid 0 0] : 中 PeerApp/GnutellaApp 的對應部份, : 不過我還是不清楚 $nodeid 0 0 三個變數是傳到 .cc 的哪裡??? : 請問是以下的 code 的位置嗎? : GnutellaApp::GnutellaApp(NodeAddr_t addr): PeerApp(addr) { : ping_timer_ = new PingTimer(this); : watchDog_ = new WatchDog(this); : isBootserver_ = FALSE; : ping_interval_ = PING_INTERVAL; : watch_interval_ = CONN_INTERVAL; : max_deg_ = MAX_DEGREE; : bind("isBootserver_", &isBootserver_); : bind("max_deg_", &max_deg_); : bind("isWireless_", &isWireless_); : : : : : bind 的參數是直接設定在 tcl/lib/ns-defaults.tcl ,不需要用參數傳遞的方式傳進 constructor 如果你會用 gdb 的話,可以試著追一下建立的流程,並且 print return (new GnutellaApp(atoi(argv[4]))); 中的 argv[4] 之值 看看是不是跟 GnutellaApp::GnutellaApp(NodeAddr_t addr): PeerApp(addr) { 的 addr 之值相同 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.34.199
文章代碼(AID): #1D-Bb0TW (Network_Sim)
文章代碼(AID): #1D-Bb0TW (Network_Sim)