我在一些Tcl变量上有Tcl_TraceVar TCL_TRACE_WRITES回调,这样我就可以在C ++端响应它们的变化。在回调中,我需要变量的新值和旧值。新值是可用的,因为回调是在值发生变化后执行的;如何检索旧值,而不是单独存储它?
答案 0 :(得分:1)
您必须分别存储旧的变量内容;在跟踪回调运行时,旧值已被替换。 (这对于想要根据变化进行自我更新的代码非常有用,但是当你想要观察增量或强制执行某种否决时不太好。)我知道这不是你想要的答案,但它是什么有。。
如果您正在处理简单变量(或char *
字符串并且不介意它们由Tcl的内置内存管理器管理)并且不需要任何特殊的东西,您可以尝试查看是否Tcl_LinkVar()
API function将为您效劳。它建立在跟踪之上,它可以强制执行只读性质(因为它不仅具有Tcl变量而且还具有C(++)变量以从中获取旧值)。如果你需要更复杂的东西(比如条件拒绝不是基于“我可以将其解析为float
/ int
”这样的规则),你必须自己编写代码。