2011-11-14 51 views
0

是否有可能通过getters和setter创建Luabind属性,以便在等待查询在不同的线程中执行时产生?下面的语法编译,但似乎并没有工作:Luabind属性获取者和设置者可以产生?

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

包装纸上的Lua侧的对象和周围添加定期的功能特性的包装是不是一个好的选择,因为我需要定义基类这些属性和这需要为每个派生类重复包装代码。

回答

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功能。

+0

我明白收益是如何工作的 - 我已经有一个工作协程调度器。这些函数立即返回一个对象('ScriptRequest'),该对象在时间到来时处理将正确的返回值传回给'luabind :: resume_function'。这一切正常的功能正常工作,我只是试图将它绑定到一个属性。 – Xtapolapocetl

+0

@Xtapolapocetl:哦。好吧,我想这只是一个Luabind错误。虽然这并不奇怪,因为没有使用getter和setter方法的不同策略的接口。 –

+0

Luabind中的一个错误,或者仅仅是缺少功能?这似乎应该得到支持。 – Xtapolapocetl