0

是否可以创建一个带有 getter 和 setter 的 Luabind 属性,它们在等待查询在不同线程中执行时产生?以下语法编译但似乎不起作用:

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

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

4

1 回答 1

0

以下语法编译但似乎不起作用:

当然不行;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-14T18:54:21.567 回答