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

时间:2014-08-08 21:37:57

标签: callback tcl

我在一些Tcl变量上有Tcl_TraceVar TCL_TRACE_WRITES回调,这样我就可以在C ++端响应它们的变化。在回调中,我需要变量的新值和旧值。新值是可用的,因为回调是在值发生变化后执行的;如何检索旧值,而不是单独存储它?

1 个答案:

答案 0 :(得分:1)

您必须分别存储旧的变量内容;在跟踪回调运行时,旧值已被替换。 (这对于想要根据变化进行自我更新的代码非常有用,但是当你想要观察增量或强制执行某种否决时不太好。)我知道这不是你想要的答案,但它是什么有。。

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