#include <tcl.h>
#include <iostream>
using namespace std;
char* myTraceProc(ClientData clientData, Tcl_Interp* interp, const char* name1, const char* name2, int flags) {
cout << "myTraceProc" << endl;
//changing the object
return NULL;
}
int main(int argc, char* argv[]) {
Tcl_FindExecutable(argv[0]);
Tcl_Interp *interp = Tcl_CreateInterp();
Tcl_TraceVar(interp, "database", TCL_TRACE_WRITES, myTraceProc, 0);
return 0;
}
这是我的 c++/tcl 程序的一部分。实际上它并没有显示问题,但我会尝试解释它。
该变量database
具有自定义类型。它是使用Tcl_RegisterObjType proc 注册的。问题是,当我在myTraceProc
proc 中对跟踪的对象进行更改时,解释器会复制该对象(Tcl_DupInternalRepProc
被调用)。这不是程序的期望行为。如果不创建克隆并且所有费用都使用确切的对象完成,那就太好了。我查看了 Tcl_TraceVar文档,但没有找到禁用它的方法。