草庐IT

lua-patterns

全部标签

C++/Lua FFI 将用户数据呈现为表格?

我在C++中有以下简单代码,其中Object是一个标准容器:staticintcreate_an_object(lua_State*L){autoobj=static_cast(lua_newuserdata(L,sizeof(Object*)));*obj=another_valid_obj;luaL_newmetatable(L,"object_metatable");lua_pushcfunction(L,object_metatable_function);lua_setfield(L,-2,"__index");lua_pop(L,1);return1;}staticinto

c++ - SWIG Lua 和传递数组

我目前有以下lua代码:g=engine.CGeometry()vertexes={}vertexes[1]=0vertexes[2]=0vertexes[3]=0vertexes[4]=0vertexes[5]=-1vertexes[6]=0vertexes[7]=-1vertexes[8]=0vertexes[9]=0print"addingvertexes"g:SetVertexes(vertexes)其中g:SetVertexes()在C++中的实现方式为:voidCGeometry::SetVertexes(double*vertexes){this->vertexes=ve

c++ - 如何在 LUA 中创建 C++ 兼容函数对象?

我正在考虑如何设计我的API,我计划在LUA中创建一个带有脚本层的C++应用程序。对于我设计中的几个关键点,我想让用户能够创建一个函数对象来表示他想在LUA中做什么,而不是将这个函数对象从LUA发送到C/C++。在伪代码中,在C++中我有一个classTclassT{...intnum1=0;floatnum2=0.0f;std::stringstr{"NONE"};...};我想像这样用LUA提供的functionobject操作T的实例voidapplyFunc(Tt,Ff){f(t);}问题是我在LUA中找不到任何创建函数对象的东西,例如C++11lambda或std::func

c++ - <eof> 附近的 lua 函数参数

我尝试在C++项目中使用lua。对于lua执行,我这样写:#include...luaEngine=luaL_newstate();luaL_openlibs(luaEngine);register_results(luaEngine);//Forregisterc++objectintheLUAscriptasmetatablelua_pushstring(luaEngine,resultsId.c_str());lua_setglobal(luaEngine,"resultsId");lua_pushboolean(luaEngine,needReloadModel);lua_se

c# - 从 Lua 5.1 移植到 5.2

我在将一些较旧的Lua5.1代码移植到Lua5.2时遇到了一些问题。我希望能够使用现有的Lua5.2dll/lib,因此任何移植都需要使用Lua5.2的现有API来完成。为了让它更复杂一些,我使用DllImport来P/Invoke一些LuaAPI调用。这意味着所提供的任何#define快捷方式都将不起作用。例如使用lua_pushglobaltable是不可能的。大多数更新是必需的,因为LUA_REGISTRYINDEX不再可访问。到目前为止,我有以下内容:1a)替换lua_pushstring(luaState,"tablename");lua_settable(luaState,

C++ 与 Lua 的协程交互

零、前言Lua语言不支持真正的多线程,即不支持共享内存的抢占式线程。这样的模式能减少一些多线程的问题。多线程的问题源于线程抢占和共享内存,而如果非抢占式线程或者不使用共享内存则能避免多线程问题,Lua同时支持这两种方案。从之前分享的《Lua协程》文章中知道:Lua语言的线程是协作式的,即协程,可以避免因不可预知的线程切换带来的问题。Lua状态间内存不共享,所以各个状态相互独立运行,可以并行操作。一、多线程从C-API的角度,可以把线程当作一个栈,每个栈保存着一个线程中挂起的函数调用信息,以及每个函数调用的参数和局部变量。也就是说,一个栈包括了一个线程得以继续运行所需的所有信息。因此,要达到多线

C++ 模板元编程 : how to deduce type in expression pattern

我想要静态检查lambda的参数类型。我在下面编写了这段代码,它似乎产生了正确的结果。structB{};autolamBc=[](Bconst&b){std::coutconstexprautoArgType(R(ClosureType::*)(Arg)const)->Arg;templateusingArgType_t=decltype(ArgType(&T::operator()));//ArgType_tis"referencetoBconst"但是,我注意到,例如,标准库使用类模板特化从std::remove_reference中的引用类型中提取引用类型。所以我尝试了这种方法

c++ - 为嵌入式 Lua 脚本设置 'environment'

我在C++应用程序中嵌入了一个Lua解释器。我想为运行脚本设置一个“环境”,以便所有脚本都可以使用某些变量。例如,我想将只读对象Foo和FooBar公开给脚本,这样Foo和FooBar可用于所有正在运行的脚本。有谁知道我该怎么做?展示如何做到这一点的片段将非常有用。 最佳答案 我没有听说过Lua中的只读变量,但您可以通过函数调用使环境可用来防止修改。如果C++应用程序很大,您可能希望使用工具来生成可以从Lua调用的接口(interface)。我过去曾幸运地使用过tolua++:假设demo.hpp是C++应用程序的头文件:#ifnd

c++ - 如何在 Lua 脚本中创建 GUID?如果有帮助,请使用 LuaPlus

我目前正在使用LuaPlus开发一个项目,我需要能够使用GUID,但似乎无法在lua中找到它们。当我为lua构建数据时,没有setGUID,有设置数字、设置字符串等。还有一个Set()函数。有谁知道将GUID从c++传递到lua以及从lua传递到c++的正确方法。非常感谢。更新:谢谢大家的回复。感谢您的快速回复。我实际上不会经常搜索类型转换,主要是在我们加载所有内容时在前端搜索。但是,我可能有点担心太多,因为游戏有点小而且不会有大量Actor无论如何。我正在考虑在lua中编写一个优化的字符串比较,您可以在其中针对测试参与者检查GUID的第一个字符。如果通过,则转到第二个,依此类推。如果

c++ - 在 C 中存储对 Lua 值的引用,如何实现?

例如,假设我有一个键处理接口(interface),在C++中定义为:classKeyBoardHandler{public:virtualonKeyPressed(constKeyEventArgs&e);virtualonKeyReleased(constKeyEventArgs&e);}现在,我想将它扩展到Lua,让Lua可以利用并在脚本中注册一个KeyboardHandler。这是到目前为止的原型(prototype)。classScriptKeyboardHandler:publicKeyboardHandler{public:...previousmethodsomitte