Luabind属性的getter和setter可以yield吗?

有没有可能创建一个 Luabind 属性,它具有在等待不同线程执行查询时产生的 getter 和 setter?以下语法编译成功,但似乎无法正常工作:

luabind::class_<Foo>("Foo")
  .property("bar", &Foo::getBar, &Foo::setBar, luabind::yield)

在 Lua 端包装对象并在常规函数周围添加属性包装器不是一个好的选择,因为我需要在基类上定义这些属性,这将需要对每个派生类重复包装代码。

原文链接 https://stackoverflow.com/questions/8125794

点赞
stackoverflow用户734069
stackoverflow用户734069

以下语法可以编译,但似乎没用:

当然不行,luabind::yield解决的是不同的问题。yield告诉系统在函数完成后而不是之前或其中间点屈服。

在C/C++函数的中间不能屈服。Lua 5.2增加了设置“resume”函数的能力,但即使如此,在C++代码中屈服也存在重大危险,因为Lua通常不会清理堆栈。

您要做的是在调用函数之前屈服。这相当于这个Lua代码:

function myGet(...)
  local tester = StartAsyncAction(...);
  while(~tester:IsFinished()) do
    coroutine.yield();
  end
  return tester:Get(...);
end

你不能真正在C/C++中模仿它;不使用Lua 5.2。而Luabind并不完全支持新的5.2功能。

2011-11-14 18:54:21