从lua脚本中创建一个新的C++对象?
问题描述:
---上下文---从lua脚本中创建一个新的C++对象?
我想要一个名为“fileProcessor”的类。这个类是完全静态的,仅仅作为一个方便的命名空间(在我的普通库名字空间内)用于一些全局函数。这是类的,只有相关的东西
class fileProcessor{
private:
lua_State* LUA_state;
public:
static std::variant<type1,type2> processFile(const char* filePath,const char* processorScript);
}
请再次注意,我ommitted大部分的东西从类,所以如果有什么似乎很奇怪忽略它的基本蓝图。
什么样的流程文件是应该做的是:
- 阅读文件路径的文件,存储所有指令,包括它(这是我自己的文件类型或语法的这种风格已经正确handeled)。指令存储在字符串中,一个用于命令,另一个用于后面的所有内容。
- 阅读脚本文件,并检查它是否有注释掉的fileProcessor行在顶部。这是为了确保加载的lua脚本是相关的,而不是一些随机行为脚本
- 加载并编译lua脚本。
- 使所有读取指令可用(它们被保存在前面提到的2个字符串的结构中)
- 运行该文件并返回对象。该对象应该只是我列在返回类型中的类型(变体)
我遇到了步骤4和脚本的一个重要部分的问题。
--- ---问题
我怎样才能让卢阿内TYPE1或TYPE2可能的完整新对象的创建,从Lua中写它,然后把它从后面LUA堆栈到C++,并仍然知道它的type1或type2?
---没有提供,因为这个问题就比较一般了,我提供我的课的唯一原因的例子是上下文.---
答
好像你正在尝试做它的另一方式。我引用this的一部分回答:
......你在期待Lua是主要的语言,而C++是客户端。问题是,Lua C接口的设计不是这样工作的,Lua是客户端,所有的努力工作都是用C编写的,这样Lua可以毫不费力地称呼它。
如果您确信没有其他方式可以采用其他方式,您可以按照解决方法that给出答案。否则,我认为你可以通过使用LUA来实现你所需要的。
LUA有8种基本类型(零,布尔型,数字,字符串,用户数据,功能,线程,和表)。但是,您可以根据需要添加新类型,方法是在本机C++中将类创建为新类型并将其注册到LUA。
您可以通过注册:
- 使用对C一些LUA帮手++一样
luna.h
(as shown in this tutorial)。 - 推出一个新的lua表与C++类(check this answer)。
类对象实例在您的本机C++代码中创建并传递给LUA。然后,LUA使用类接口给出的方法。
你如何在C++中运行lua,你正在使用哪个库? –
@BjørnMoholt这与我的问题有关吗?我正在使用您可以从网站上获得的正常lua图书馆。 https://www.lua.org/pil/24.1.html最后几个paraghraphs解释如何在C++中使用它 – MoustacheSpy
这可能是,根据不同的lua libs,我没有使用lua和C++的经验,所以我不知道支持哪种类型的东西,所以我必须检查文档,这意味着我必须知道您正在使用哪个库。另一种选择是随机挑选一个,并希望最好,但这看起来并不谨慎。 –