NS2 で、C++ 変数を TCL スクリプトに埋め込む方法はありますか? たとえば、TCL では、このようにルーティング プロトコルを設定すると、次のようなset opt(rt) XXX
XXX
C++ プログラムで定義された変数になる可能性があります。
if(CONDITION==1)
XXX = "FLOODING";
if(CONDITION==2)
XXX = "AODV";
...
最も簡単な方法はTcl_LinkVar
、C++ の char* 変数 (std::string はサポートされていません) を Tcl に結合するために使用することです。このように、C++ 変数をTcl_UpdateLinkedVar
変更し、変数が変更されたことを Tcl が認識できるように呼び出すだけです。変数にトレースを設定していない場合は使用する必要はありませんがTcl_UpdateLinkedVar
、実際には非常に一般的なメカニズムであるため、呼び出しを行うことをお勧めします。は Tcl インタープリターへの再入呼び出しであるTcl_UpdateLinkedVar
ことに注意してください。実行するトレースがコードへのループバックをトリガーしないように注意する必要があります…</p>
// 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++ 変数を設定するときに古いものを破棄するために一致したものを使用するため)。