我有一個關於使用LuaPlus的初學者問題。LuaPlus中的C++對象
我在這裏看一些代碼的對象構造器中:
m_MetaTable = g_pApp->m_pLuaStateManager->GetGlobalState()->GetGlobals().CreateTable("EventManager");
m_MetaTable.SetObject("__index", m_MetaTable);
m_MetaTable.RegisterObjectDirect("TriggerEvent", (EventManager *)0, &EventManager::TriggerEventFromScript);
m_MetaTable.RegisterObjectDirect("RegisterEventType", (EventManager *)0, &EventManager::RegisterScriptEventType);
m_MetaTable.RegisterObjectDirect("AddScriptListener", (EventManager *)0, &EventManager::AddScriptListener);
m_MetaTable.RegisterObjectDirect("RemoveScriptListener", (EventManager *)0, &EventManager::RemoveScriptListener);
m_MetaTable.RegisterObjectDirect("AddScriptActorListener", (EventManager *)0, &EventManager::AddScriptActorListener);
m_MetaTable.RegisterObjectDirect("RemoveScriptActorListener", (EventManager *)0, &EventManager::RemoveScriptActorListener);
LuaPlus::LuaObject luaStateManObj = g_pApp->m_pLuaStateManager->GetGlobalState()->BoxPointer(this);
luaStateManObj.SetMetaTable(m_MetaTable);
g_pApp->m_pLuaStateManager->GetGlobalState()->GetGlobals().SetObject("EventManager", luaStateManObj);
首先我們創建一個元表設置其__index等於元表本身和一些C++函數與表中的條目相關聯。現在任何使用這個metatable的表都應該「繼承」這些函數,如果我正確地理解這個。
我不明白的部分是最後3行代碼。看起來我們創建了一個LuaObject,然後使用這個指針將它與C++對象相關聯,將它的metatable設置爲與上面相同,然後創建一個全局Lua變量,以便可以通過Lua腳本訪問它。
如果任何使用上述metatable的表已經可以訪問C++成員函數,那麼這麼做的目的是什麼?