如何为lua_State设置全局C++指针
How to set global C++ pointer for lua_State
如何为lua_State设置一次全局c++指针。从C函数中得到。
Context *context = new Context();
lua_State *lua = luaL_newstate();
// Store context in lua state
lua_pushcfunction(lua, fn_one);
lua_setglobal(lua, "one");
// Register other global functions
我将从我的所有功能中获得它
int fn_one(lua_State *lua)
{
Context *context = (Context *) lua_touserdata(lua, -1);
// context is null or error get object
return 0;
}
我可以设置一次并进入所有全局函数。
这是为了在Lua上下文中传递C++指针
将指针作为轻用户数据推入同一模块可能是最简单的。这样,只需将每个Lua函数作为参数传递,就可以轻松地访问该资源。
您也可以使用upvalue,它在C闭包中隐式可用,而不必将其作为参数传递。我已经在其他地方回答了这个问题:https://stackoverflow.com/a/51337524
#include <lua.hpp>
struct Context {
int i;
};
int fn_one(lua_State *L) {
luaL_checkany(L, 1);
Context *context = static_cast<Context *>(lua_touserdata(L, 1));
lua_pushinteger(L, context->i);
return 1;
}
extern "C" int luaopen_example (lua_State *L) {
Context *context = new Context{42};
lua_newtable(L);
lua_pushcfunction(L, fn_one);
lua_setfield(L, -2, "one");
lua_pushlightuserdata(L, context);
lua_setfield(L, -2, "ctx");
return 1;
}
local ex = require("example")
print(ex.ctx)
print(ex.one(ex.ctx))
$ g++ -Wall -Wextra -Wpedantic -I /usr/include/lua5.3/ -shared -fPIC -o example.so example.cpp
$ lua5.3 test.lua
userdata: 0x55a81d6af920
42
Wandbox 上的实时示例
相关文章:
- Arduino 模块化编程与全局和设置
- 如何为lua_State设置全局C++指针
- 如何在C++项目中设置全局 #define?
- C vs 2017设置全局变量 - 程序仅在调试中使用断点
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 使用 API 而不是全局配置文件设置 OSM 配置选项
- Codelite不使用全局编译设置或项目编译设置
- 设置全局指针
- 存储在全局变量中的函数指针在进入函数时设置为 0,并在退出函数时返回到以前的状态
- 确定函数是否是在没有设置全局变量的情况下调用的
- 如何设置全局容器(C++03)
- 将大小设置为结构类型全局变量时发生编译器错误
- 如何在后台线程上正确设置全局鼠标挂钩
- 从存储在 SPIFFS 中的变量中设置全局对象 ESP8266.
- 在hlsl着色器中设置全局参数的正确方法是什么
- c++lua设置全局变量时出错
- 设置全局区域设置时内存泄漏
- 问:当我有一堆小部件时,如何设置全局mouseReleaseEvent
- 正在尝试使用Redispp在类中设置全局Redis连接
- visualstudio2013-如何在C++中的void中设置全局int