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

时间:2014-07-24 12:37:41

标签: c++ callback lua

我正在评估嵌入在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

所以我执行了我的变量读回调,然后执行var。

的puts-value

问题:我可以用Lua做这个,如果是的话怎么样?我没有找到任何关于此的直接主题。引起我注意的只是调试Lua,调试器(调试API)会监视变量的值。但我不想关注价值变化,而是关注价值变化。

1 个答案:

答案 0 :(得分:1)

我认为在lua中最接近这一点的是桌面上的__index metamethod(如果你只想触发一个,则检查特定的密钥)。

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