#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 のドキュメントを調べましたが、無効にする方法が見つかりませんでした。