Re: [问题] 请教简单问题 TCL 与 .cc 关系

楼主: kivava (天空快快黑)   2011-06-15 21:53:03
※ 引述《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 之值相同

Links booklink

Contact Us: admin [ a t ] ucptt.com