【问题标题】:How to insert C++ variable into TCL script program?如何将 C++ 变量插入 TCL 脚本程序?
【发布时间】:2012-01-11 08:48:39
【问题描述】:

在 NS2 中,有没有办法将 C++ 变量嵌入到 TCL 脚本中?比如在TCL中,这样设置路由协议,set opt(rt) XXXXXX可以是C++程序中定义的变量,比如

if(CONDITION==1) 

     XXX = "FLOODING";

if(CONDITION==2) 

         XXX = "AODV";

...

【问题讨论】:

  • 您正在寻找一种在两种语言中耦合变量的方法?或者您是在进行字符串操作以生成源代码之后?我假设前者;后者很无聊……

标签: c++ tcl ns2


【解决方案1】:

最简单的方法是使用Tcl_LinkVar 将C++ 中的char* 变量(不支持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 确保您始终使用 ckallocXXX 中的字符串分配内存(因为 Tcl 将使用匹配的 ckfree 来设置 C++ 变量时处理旧的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多