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

yieldの仕組みを理解しています。私は既にコルーチンスケジューラを使用しています。これらの関数はすぐにオブジェクトが返ってきます( 'ScriptRequest')。これは、時間が来たときに正しい戻り値を' luabind :: resume_function'に戻すことを処理します。これはすべて正常に機能していますが、代わりにプロパティにバインドしようとしています。 – Xtapolapocetl

+0

@Xtapolapocetl:ああ。まあ、それはちょうどルーバインデのバグだと思います。驚くべきことではありませんが、getterメソッドとsetterメソッドでは異なるポリシーを使用するためのインタフェースがないためです。 –

+0

Luabindのバグか、単に機能が欠けていますか?これはサポートされるべきもののようです。 – Xtapolapocetl

関連する問題