在Lua中跟踪变量以进行读访问,以启动用户定义的c++方法/函数

Tracing variables in Lua for read access to start user defined C++ method/function

本文关键字:用户 定义 c++ 函数 方法 启动 读访问 跟踪 Lua 变量      更新时间:2023-10-16

我正在评估要嵌入到c++应用程序中的脚本语言解释器。TCL/cpptcl和Lua是我目前关注的重点。TCL有一个很好的特性,使我能够"跟踪变量访问"。因此,每当我读取一个已定义的变量时,我的read-callback函数就会被触发:

int read_trace(const int& v, void *) {
  cout << "read trace triggered" << endl;
  return v;
}
...
void tclInterpreter() {
  std::cout << ": Starting TCL interpreter!" << std::endl;
  // new TCL
  Tcl::interpreter i;
  i.def_read_trace("tracedVar", "read", read_trace);
  // load the script
  ifstream script("helloworld.tcl");
  // run the script with the given arguments
  i.eval(script);
}

因此,如果我现在从我的c++应用程序中执行以下TCL:

set tracedVar 10
for { set i 0 } { $i <= 5 } { incr i } {
  puts $tracedVar
}

我收到输出:

read trace triggered
10
read trace triggered
10
read trace triggered
10
read trace triggered
10
read trace triggered
10
read trace triggered
10

我得到变量read回调的执行,然后是var的put_value

问题:我可以用Lua做到这一点吗?如果可以,怎么做?我没有找到任何直接的主题。唯一引起我注意的是调试Lua,其中调试器(调试API)将监视变量的值。但是我不想监视值的变化,而是监视值的访问。

我认为lua中与此最接近的是表上的__index元方法(如果您只想触发一个键,则检查特定键)。

如果需要,甚至可以在默认的全局表(_G)上完成。