0
在NS2中,有沒有辦法將C++變量嵌入到TCL腳本中?例如,在TCL,這樣設置的路由協議,set opt(rt) XXX
XXX
可以是被C++定義程序++一個變量,如如何將C++變量插入TCL腳本程序?
if(CONDITION==1)
XXX = "FLOODING";
if(CONDITION==2)
XXX = "AODV";
...
在NS2中,有沒有辦法將C++變量嵌入到TCL腳本中?例如,在TCL,這樣設置的路由協議,set opt(rt) XXX
XXX
可以是被C++定義程序++一個變量,如如何將C++變量插入TCL腳本程序?
if(CONDITION==1)
XXX = "FLOODING";
if(CONDITION==2)
XXX = "AODV";
...
的最簡單的方法是使用Tcl_LinkVar
以耦合的char *變量C( std :: string不支持)到Tcl。就像那樣,你所要做的就是改變C++變量,並且調用Tcl_UpdateLinkedVar
以允許Tcl注意到變量已經改變。如果您從未在變量上設置任何痕跡,則不需要使用Tcl_UpdateLinkedVar
,但它們實際上是相當常見的機制,因此建議進行該調用。請注意,Tcl_UpdateLinkedVar
是對Tcl解釋器的重入調用;一些應注意,以確保您運行的任何痕跡不會觸發環回你的代碼...
// Setup (done once)...
Tcl_LinkVar(interp, "XXX", &XXX, TCL_LINK_STRING|TCL_LINK_READ_ONLY);
// Your code ...
if(CONDITION==1)
XXX = "FLOODING";
if(CONDITION==2)
XXX = "AODV";
// Notify Tcl ...
Tcl_UpdateLinkedVar(interp, "XXX");
如果你想Tcl變量XXX
的設置來改變C++變量XXX
,你需要採取額外的照顧。刪除使用TCL_LINK_READ_ONLY 和的保證始終使用ckalloc
在XXX
爲字符串分配內存(因爲TCL將使用匹配ckfree
設置C++變量時處置舊的)。
你想要在兩種語言中連接變量嗎?還是你在做字符串操作後生成源代碼?我會假設前者;後者很無聊...... – 2012-01-11 15:48:08