2013-05-26 60 views
0

我需要使用luabind註冊一個成員函數,它應該將lua函數作爲參數。對於任何正常功能我通常只是這樣做:但是如何用lua-function參數使用luabind註冊成員函數?

int SomeLuaFunction(lua_State *l) 
{ 
    luaL_checkfunction(l,1); 
    int fc = luaL_ref(l,LUA_REGISTRYINDEX); 
    [...] 
} 

Luabind使用的參數列表,所以我不知道該如何告訴它我期待的功能:

void Lua_ALSound_CallOnStateChanged(lua_State *l,boost::shared_ptr<ALSound> pAl,<function-parameter?>) 
{ 
    [...] 
} 
lua_bind(luabind::class_<ALSound COMMA boost::shared_ptr<ALSound>>("ALSound") 
    .def("CallOnStateChanged",&Lua_ALSound_CallOnStateChanged) 
); 

(僅代碼的相關部分在這裏顯示,lua_bind使用luabind ::模塊)

盧阿 - 例如我想要做到:

local al = ALSound() -- I'm aware this wouldn't work since I haven't defined a constructor 
al:CallOnStateChanged(function() 
    [...] 
end) 

也許有一種方法可以將附加函數添加到已經註冊的類中,而不需要luabind?任何建議,將不勝感激。

回答

0

如果您希望能夠擁有一個以Lua對象爲參數的函數,那麼您應該使用函數luabind::object作爲參數。然後你可以檢查它是否是一個函數,如果是的話就調用它。

+0

嗯,我簡直不敢相信那麼簡單。謝謝,它完美的工作! – Silverlan

+2

@Silverlan:如果您想要感謝某人的答案,請接受答案旁邊的複選標記。 –

相關問題