如何在Tcl_TraceVar回调中获取Tcl变量的先前值?

麦可

我在一些Tcl变量上有Tcl_TraceVar TCL_TRACE_WRITES回调,以便我可以在C ++方面响应它们的更改。在回调中,我需要变量的新值和旧值。新值可用,因为在更改值后将执行回调;否则,将不执行任何操作。我如何检索旧值,而又没有单独存储呢?

多纳研究员

您必须分别存储旧的变量内容。在跟踪回调运行时,旧值已被替换。(这对于想要响应更改而更新自身的代码足够有用,但对于要观察增量或强制执行某种否决权的代码来说就不够用了。)我知道这不是您想要的答案,但这就是答案有。

如果您正在使用简单变量(或char *字符串,并且不介意由Tcl的内置内存管理器管理它们)并且不需要任何特殊功能,则可以尝试看看Tcl_LinkVar()API函数是否适合您。它建立在跟踪的基础上,并且可以强制执行只读性质(因为它不仅具有Tcl变量,而且还具有C(++)变量以从中获取旧值)。但是,如果您需要更复杂的东西(例如有条件拒绝而不是基于“我可以将其解析为float/ int”之类的规则),则必须自己编写代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章