从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大部分的东西从类,所以如果有什么似乎很奇怪忽略它的基本蓝图。

什么样的流程文件是应该做的是:

  1. 阅读文件路径的文件,存储所有指令,包括它(这是我自己的文件类型或语法的这种风格已经正确handeled)。指令存储在字符串中,一个用于命令,另一个用于后面的所有内容。
  2. 阅读脚本文件,并检查它是否有注释掉的fileProcessor行在顶部。这是为了确保加载的lua脚本是相关的,而不是一些随机行为脚本
  3. 加载并编译lua脚本。
  4. 使所有读取指令可用(它们被保存在前面提到的2个字符串的结构中)
  5. 运行该文件并返回对象。该对象应该只是我列在返回类型中的类型(变体)

我遇到了步骤4和脚本的一个重要部分的问题。

--- ---问题

我怎样才能让卢阿内TYPE1或TYPE2可能的完整新对象的创建,从Lua中写它,然后把它从后面LUA堆栈到C++,并仍然知道它的type1或type2?

---没有提供,因为这个问题就比较一般了,我提供我的课的唯一原因的例子是上下文.---

+0

你如何在C++中运行lua,你正在使用哪个库? –

+0

@BjørnMoholt这与我的问题有关吗?我正在使用您可以从网站上获得的正常lua图书馆。 https://www.lua.org/pil/24.1.html最后几个paraghraphs解释如何在C++中使用它 – MoustacheSpy

+0

这可能是,根据不同的lua libs,我没有使用lua和C++的经验,所以我不知道支持哪种类型的东西,所以我必须检查文档,这意味着我必须知道您正在使用哪个库。另一种选择是随机挑选一个,并希望最好,但这看起来并不谨慎。 –

好像你正在尝试做它的另一方式。我引用this的一部分回答:

......你在期待Lua是主要的语言,而C++是客户端。问题是,Lua C接口的设计不是这样工作的,Lua是客户端,所有的努力工作都是用C编写的,这样Lua可以毫不费力地称呼它。

如果您确信没有其他方式可以采用其他方式,您可以按照解决方法that给出答案。否则,我认为你可以通过使用LUA来实现你所需要的。

LUA有8种基本类型(零,布尔型,数字,字符串,用户数据,功能,线程,)。但是,您可以根据需要添加新类型,方法是在本机C++中将类创建为新类型并将其注册到LUA。

您可以通过注册:

  1. 使用对C一些LUA帮手++一样luna.h(as shown in this tutorial)
  2. 推出一个新的lua表与C++类(check this answer)

类对象实例在您的本机C++代码中创建并传递给LUA。然后,LUA使用类接口给出的方法。