我正在使用Luabind將C++ API綁定到Lua。我有一些不能直接創建的對象,而是必須在另一個線程上創建。目前,我正在通過定義一個「靜態」的成員被稱爲create
能產生直到創建對象處理這樣的:Luabind中的自定義構造函數
luabind::class_<Foo>("Foo")
.scope
[
luabind::def("create", &someCreateMethod, luabind::yield)
]
這工作,但客戶端API複雜的缺點。對於這些課程,您無法正常創建它們(例如local f = Foo()
),而是需要執行local f = Foo.create()
。
是否可以定義一個實際上不調用C++構造函數的Luabind構造函數,而是返回構造對象的另一個函數(並且可以同時產生)?我試過爲__init
和__call
定義綁定(後者在scope
下定義它,而不是它的實例),但是我沒有在任何一種方法上取得成功。
在C++或Lua方面,沒有辦法用'__call'運算符「僞造」它? – Xtapolapocetl
@Xtapolapocetl:Luabind將C++類型存儲爲userdata,因此Lua代碼不會影響其metatables。你可以從C++中戳出Luabind的metatables,但是真的,這是一個小問題,它可以忽略不計。事實上,如果語法*真的困擾你,你可以用Luabind調用對象'FooInternal',並創建一個函數'Foo'來調用'FooInternal.create'函數。用戶可以認爲他們使用的是一個名爲「Foo」的類。 –
@Xtapolapocetl:除了Nicol的評論之外,如果你只用'Foo'來創建對象(即沒有其他的作用域方法),你甚至可以做'Foo = Foo.create'。 – sbk