Luabind的财产吸引者和制定者可以收益吗?

时间:2011-11-14 17:47:12

标签: lua coroutine luabind

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

当然不起作用; luabind::yield解决了不同的问题。 yield告诉系统在函数完成后产生,而不是之前,当然不在它的中间。

你无法在C / C ++函数中屈服。 Lua 5.2增加了设置“恢复”功能的能力,但即便如此,在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功能。