Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Lua中创建并访问Lua对象,该对象存储在C++;程序_C++_Object_Lua - Fatal编程技术网

C++ 在Lua中创建并访问Lua对象,该对象存储在C++;程序

C++ 在Lua中创建并访问Lua对象,该对象存储在C++;程序,c++,object,lua,C++,Object,Lua,也许我不擅长谷歌搜索,也许我想得太多了,但如果我有这个Lua类: --Foo: Foo = {number = 0} function Foo.setNumber(newNumber) number = newNumber end 如果我尝试在另一个.lua文件中使用该类,则在该文件结束后,该对象将被销毁。我已经看到的其他教程使用Lua()假定C++程序已经知道了类,所以它被定义为普通C++类。然而,在我的例子中,Lua的点是C++程序只是一个处理绘图的框架,因此不能将硬编码到程序中的

也许我不擅长谷歌搜索,也许我想得太多了,但如果我有这个Lua类:

--Foo:
Foo = {number = 0}
function Foo.setNumber(newNumber)
    number = newNumber
end
如果我尝试在另一个.lua文件中使用该类,则在该文件结束后,该对象将被销毁。我已经看到的其他教程使用Lua()假定C++程序已经知道了类,所以它被定义为普通C++类。然而,在我的例子中,Lua的点是C++程序只是一个处理绘图的框架,因此不能将硬编码到程序中的Lua类。 所以,我的问题是,我如何使用Lua定义和保存一个Lua对象,但除非我明确告诉它,否则该对象不会被销毁?我正在考虑在C++中创建一个类,存储Lua对象的向量/映射,然后Lua脚本可以使用一个公开的函数请求一个对象。不幸的是,这听起来非常慢,因为Lua执行一个函数,它需要从C++接收类的副本,调用类的函数,然后将它返回到C++,以便它覆盖以前的副本。 下面是一些从我如何运行Lua脚本(在我看来非常好)的教程中修改的代码:

#包括
#包括
#包括
//要公开的示例类(我意识到它与Foo非常相似):
分类栏
{
私人:
std::字符串;
公众:
void setString(const std::string&newString){string=newString;}
}
int main()
{
//公开API:
lua_State*L=luaL_newstate();
luaL_openlibs(L);
luabridge::getGlobalNamespace(L)
.beginClass(“酒吧”)
.addConstructor()
.addFunction(“setString”,&Foo::setString)
.endClass();
//运行脚本:
luaL_dofile(L,“script.lua”);
luaL_openlibs(L);
lua_pcall(L,0,0,0);
返回0;
}

Lua通过垃圾收集管理自己的生命周期。如果它看不到使用的对象,它会将其销毁。诀窍是将这些对象存储在一个LUA表中,用C++添加和移除它们,控制它们的生命周期。

Lua通过垃圾收集来管理它自己的生命周期。如果它看不到使用的对象,它会将其销毁。诀窍是将这些对象存储在一个LUA表中,用C++添加和移除它们,控制它们的生命周期。

Lua通过垃圾收集来管理它自己的生命周期。如果它看不到使用的对象,它会将其销毁。诀窍是将这些对象存储在一个LUA表中,用C++添加和移除它们,控制它们的生命周期。

Lua通过垃圾收集来管理它自己的生命周期。如果它看不到使用的对象,它会将其销毁。诀窍是将这些对象存储在一个LUA表中,用C++添加和移除它们,控制它们的生命周期。

< P> Lua,所有全局变量都存储在全局表<强> G (称为)。除非有人显式修改它,否则只有在销毁时才会销毁它

因此,您可以使用以下命令运行第二个脚本:

luaL_dofile(L, "another_script.lua");

它应该看到第一个脚本留下的全局变量,因为该脚本使用与第一个脚本相同的Lua状态。

在Lua中,所有全局变量都存储在全局表\u G中(称为)。除非有人显式修改它,否则只有在销毁时才会销毁它

因此,您可以使用以下命令运行第二个脚本:

luaL_dofile(L, "another_script.lua");

它应该看到第一个脚本留下的全局变量,因为该脚本使用与第一个脚本相同的Lua状态。

在Lua中,所有全局变量都存储在全局表\u G中(称为)。除非有人显式修改它,否则只有在销毁时才会销毁它

因此,您可以使用以下命令运行第二个脚本:

luaL_dofile(L, "another_script.lua");

它应该看到第一个脚本留下的全局变量,因为该脚本使用与第一个脚本相同的Lua状态。

在Lua中,所有全局变量都存储在全局表\u G中(称为)。除非有人显式修改它,否则只有在销毁时才会销毁它

因此,您可以使用以下命令运行第二个脚本:

luaL_dofile(L, "another_script.lua");

C++,它应该看到第一个脚本所留下的全局变量,因为脚本使用的是第一个相同的Lua状态。

我想这取决于如何调用C++中的Lua脚本。@ StgaTaLov是什么意思?就像我使用的库一样?如果从控制台运行“lua.lua”和“lua b.lua”,那么它们肯定不会共享全局变量。我假设您从C++代码调用LUA脚本。然后有必要确保两个脚本使用相同的LUA状态。这就是为什么我要求您提供有关如何运行LUA脚本的更多详细信息。@stgatilov我一直在运行LUA脚本,方法是使用Luabridge公开我的API,然后使用Luabridge运行特定文件夹中的所有
.LUA
文件(我将在问题中添加一些代码)我认为这取决于你如何调用C++中的Lua脚本。就像我使用的库一样?如果从控制台运行“lua.lua”和“lua b.lua”,那么它们肯定不会共享全局变量。我假设您从C++代码调用LUA脚本。然后有必要确保两个脚本使用相同的LUA状态。这就是为什么我要求您提供有关如何运行LUA脚本的更多详细信息。@stgatilov我一直在运行LUA脚本,方法是使用Luabridge公开我的API,然后使用Luabridge运行特定文件夹中的所有
.LUA
文件(我将在问题中添加一些代码)我认为这取决于你如何调用C++中的Lua脚本。就像我使用的库一样?如果从控制台运行“lua.lua”和“lua b.lua”,那么它们肯定不会共享全局变量。我假设您从C++代码调用LUA脚本。然后有必要确保两个脚本使用相同的LUA状态。这就是为什么我要求你提供更多关于你如何运行LUA纸条的细节