如何在Tcl_TraceVar回调中获取Tcl变量的前一个值



我在几个Tcl变量上有Tcl_TraceVar TCL_TRACE_WRITES回调,以便我可以在c++端响应它们的更改。在回调中,我需要变量的新值和旧值。新值是可用的,因为回调是在值改变后执行的;我如何检索旧值,不单独存储它?

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

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

最新更新