C++ C++;LuaPlus中的对象

C++ C++;LuaPlus中的对象,c++,lua,C++,Lua,我有一个关于使用LuaPlus的初学者问题 我正在查看对象构造函数中的一些代码: m_MetaTable = g_pApp->m_pLuaStateManager->GetGlobalState()->GetGlobals().CreateTable("EventManager"); m_MetaTable.SetObject("__index", m_MetaTable); m_MetaTable.RegisterObjectDirect( "TriggerEvent",

我有一个关于使用LuaPlus的初学者问题

我正在查看对象构造函数中的一些代码:

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);

首先,我们创建一个可编程的设置,其y-索引与元语言本身相等,并将一些C++函数与表中的条目相关联。现在,如果我理解正确,任何使用这个元表的表都应该“继承”这些函数

我不理解的部分是最后3行代码。看起来我们创建了一个LUAObject,然后使用这个指针将它与C++对象联系起来,将它的元集设置为与上面相同的,然后创建全局LUA变量,以便它可以在Lua脚本中访问。

如果使用上面的元表的任何表已经可以访问C++成员函数,那么,这是什么意思?

我不确定是什么让你困惑,但是我理解了每一行

LuaPlus::LuaObject luaStateManObj = g_pApp->m_pLuaStateManager->GetGlobalState()->BoxPointer(this);

这行创建了一个包装C++指针的LUA对象。该对象存在于lua中,但就运行时而言,它是一个无名对象,因此您无法从lua端访问它

luaStateManObj.SetMetaTable(m_MetaTable);
非常简单,只需将之前创建的元表设置为刚刚创建的对象

g_pApp->m_pLuaStateManager->GetGlobalState()->GetGlobals().SetObject("EventManager", luaStateManObj);
在这里,您将为您创建的lua对象提供一个“lua名称”,以便您可以从脚本端访问它。在这一行之后,如果执行lua脚本调用名为“EventManager”的对象,它将引用您在此处分配的对象。在这一行之前,lua中没有绑定到“EventManager”名称的对象(假设之前没有人定义它)