2011-11-14 90 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