是否可以创建一个带有 getter 和 setter 的 Luabind 属性,它们在等待查询在不同线程中执行时产生?以下语法编译但似乎不起作用:
luabind::class_<Foo>("Foo")
.property("bar", &Foo::getBar, &Foo::setBar, luabind::yield)
在 Lua 端包装对象并在常规函数周围添加属性包装器不是一个好的选择,因为我需要在基类上定义这些属性,这需要为每个派生类重复很多包装器代码。
以下语法编译但似乎不起作用:
当然不行;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 特性。