Luaを使用したスクリプトをアプリケーションに追加しているので、GUIツールキットのバインディングを実装する必要があります。私たちが使用するツールキットはwxWidgetsです。
私はLua5.1とluabind0.9.1を使用していますが、これまでのところ非常にうまく機能しています。ただし、イベントを最適に処理する方法がわかりません。たとえば、ボタンを作成し、クリックされたときに文字列を出力する場合は、C++で次のように記述します。
class MyClass : public wxFrame
{
MyClass (...)
{
b = new wxButton (this, -1, "Click me");
b->Bind (wxEVT_COMMAND_BUTTON_CLICKED, &MyClass::HandleButtonClick, this);
}
void HandleButtonClick (wxCommandEvent& ev)
{
wxMessageBox ("You clicked me");
}
}
私の夢-Luaで同じことをするためのAPIは次のようになります:
b = wx.Button (frm, -1, "Click me")
b.on_click = function (ev)
print ("Button clicked")
end
または、複数のイベントハンドラーを許可します。
b.on_click:add (function (ev)
print ("Button clicked again ...")
end)
不可能な場合は、C++APIに似た次のようなものを使用します。
b.bind (wx.EVT_COMMAND_BUTTON_CLICKED, function (ev)
print ("Yet again")
end)
ただし、使用したいwxWidgets-libraryのすべてのクラスにラッパークラスを記述せずに、Luabindを使用してこれを実装する方法がわかりません。
助言がありますか?
おそらく、Luabindは何らかの方法でヘルパークラス(「wxLuaEventPropagator」など)を自動的に作成できますか?そのため、wxButtonクラスには、イベントごとにネストされたwxLuaEventPropagatorクラスがあります(「on_click」など)。繰り返しになりますが、使用するwxWidgetsのすべてのクラスにラッパークラスを作成する必要はありません。これは、大量のクラスがあるためです。
(はい、私はwxLuaを知っています)