Lua 与C/C++ 交互系列:注冊枚举enum到Lua Code中
在Lua Code中注冊C/C++的枚举很easy,就像注冊全局变量一样。我们使用枚举名称作为命名空间,来避免注冊的枚举发生冲突。注冊的枚举存储在全局环境(线程环境)中。
当在Lua Code中訪问枚举时,通过名称来訪问相应的值。
sample_9.cpp c++代码例如以下:
//在Lua Code中注冊的enum,为了避免冲突,以名称作为enumTable来存储
enum Week
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
};
//定义宏用来方便使用设置键值
#define LUA_ENUM(L, val) \
lua_pushliteral(L, #val); \
lua_pushnumber(L, val); \
lua_settable(L, -3) void register_enum(lua_State* L)
{ //创建一个enumTable,用于存储Enum的全部枚举。通过枚举名称=枚举值
lua_newtable(L);
//设置 enumTable["Monday"]=Monday
LUA_ENUM(L, Monday);
LUA_ENUM(L, Tuesday);
LUA_ENUM(L, Wednesday);
LUA_ENUM(L, Thursday);
LUA_ENUM(L, Friday);
LUA_ENUM(L, Saturday);
LUA_ENUM(L, Sunday);
//把enumTable存在在_G 全局环境(线程环境)中,以枚举名称作为键
lua_setglobal(L,"Week");
}
int main(int argc, char *argv[])
{
lua_State* L = lua_open();
luaL_openlibs(L);
register_enum(L);
luaL_dofile(L, "sample_9.lua");
lua_close(L);
return 0;
}
sample_9.lua Lua Code代码例如以下:
local Week=_G["Week"]
print(Week)
print(Week.Monday)
print(Week.Tuesday)
print(Week.Wednesday)
print(Week.Thursday)
print(Week.Friday)
print(Week.Saturday)
print(Week.Sunday)
输出结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VubmluZzkwMDE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Lua 与C/C++ 交互系列:注冊枚举enum到Lua Code中的更多相关文章
- Lua与C/C++交互问题
初学lua,遇到注册C/C++交互函数问题 在lua与C/C++交互时,C/C++的注册Lua函数若是一个有返回类型(压栈)而不是获取类型的时候应该返回1而不是返回0,否则会出现在Lua中值为nil( ...
- 从注冊流程 分析怎样安全退出多个Activity 多种方式(附DEMO)
前言 因为一个同学问到我怎样依照一个流程走好之后回到首页.我曾经看到过4个解决方式,后来发现有做个记录和总结的必要,就写了这篇博文. (之前看小强也写过一篇,这里通过自身的分析完整的总结一下下面6种方 ...
- cocos2d-x lua与c++简单交互
cocos2d-x lua与c++简单交互 version: cocos2d-x 3.6 本文讲述lua与c++的一些简单交互: lua通过消息方式调用c++无参接口 c++调用lua带参接口 1.通 ...
- c++ 操作注冊表
1. 注冊表简单介绍 注冊表是为Windows NT和Windows95中全部32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息.16位驱动在Winnt (W ...
- myeclipse6.0下载及注冊码
myeclipse6.0 下载地址.官方下载地址: http://www.myeclipseide.com/module-htmlpages-display-pid-4.html 本地快速下载地址: ...
- 【spring源代码分析】--Bean的解析与注冊
接着上一节继续分析,DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法: protected void parseBeanDefini ...
- C# 系统应用之注冊表使用具体解释
在平时做项目时,我们有时会遇到注冊表的操作,比如前面我们须要获取IE浏览器地址栏的信息.获取"我的电脑"地址栏输入的目录信息.USB近期使用信息等.注冊表项是注冊表的基本组织单位, ...
- MyEclipse各种版本号注冊码
一:MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller注冊码 Subscriber:javp Subscription Code:wLR7ZL-655551-685 ...
- Lua 跟 C++ 的交互
Lua 和 C++ 是这样交互的 乱七八糟的前戏: 1. 到官网下载 Lua 文件 可參考 -> Lua 下载与配置 2. 设置环境 可參考 -> VS 配置Lua环境 交互过程 ...
随机推荐
- Hamming Distance(随机算法)
http://acm.hdu.edu.cn/showproblem.php?pid=4712 题意:计算任意两个十六进制的数异或后1的最少个数. 思路:用随机数随机产生两个数作为下标,记录这两个数异或 ...
- WPF播放器
最近由于工作需要,需要做一个播放软件,在网上参考了很多例子,园子里有很多代码.其中最多的就是wpf自带的MediaElement控件,或者VLC视频播放器. 先附我自己查询资料的链接: MediaEm ...
- 复习HTML+CSS(8)
n 普通框架 框架技术:将一个浏览器划分成若干个小窗口,每个小窗口显示一个独立的网页. 框架集合框架页 u 框架集<frameset>:主要用来划分窗口的. u 框架页<fra ...
- SecureCRT连接Ubuntu报The remote system refused the connection.解决方案
使用SecureCRT连接到远程Ubuntu,连接失败报The remote system refused the connection. 进入Ubuntu系统,终端中敲入以下命令: ps -ef|g ...
- java ---书写自己的名字
public class hello { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.println(& ...
- dotnetnuke 中使用ado.net entityframework 如果在程序中动态调用系统的连接字符串信息
1,打开如下图的Model1.Context.cs文件 2,找到 Base:(ConnString.conn)是我改的.默认生成的是"name=实体连接字符串" Connstrin ...
- DOM高级编程
前言:W3C规定的三类DOM标准接口(换图)Core DOM(核心DOM),适用于各种结构化文档:XML DOM(Java OOP学过),专用于XML文档:HTML DOM,专用于HTML文档,下面了 ...
- Arduino 9g舵机操作
一.接线原理图 一.实物图 三.事例代码 从0转180度,再从180转到0度
- node jsonwebtoken
jsonwebtoken是node版本的JWT(JSON Web Tokens)的实现.1.什么是JWT?Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于J ...
- Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal
System类 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被priva ...