在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中的更多相关文章

  1. Lua与C/C++交互问题

    初学lua,遇到注册C/C++交互函数问题 在lua与C/C++交互时,C/C++的注册Lua函数若是一个有返回类型(压栈)而不是获取类型的时候应该返回1而不是返回0,否则会出现在Lua中值为nil( ...

  2. 从注冊流程 分析怎样安全退出多个Activity 多种方式(附DEMO)

    前言 因为一个同学问到我怎样依照一个流程走好之后回到首页.我曾经看到过4个解决方式,后来发现有做个记录和总结的必要,就写了这篇博文. (之前看小强也写过一篇,这里通过自身的分析完整的总结一下下面6种方 ...

  3. cocos2d-x lua与c++简单交互

    cocos2d-x lua与c++简单交互 version: cocos2d-x 3.6 本文讲述lua与c++的一些简单交互: lua通过消息方式调用c++无参接口 c++调用lua带参接口 1.通 ...

  4. c++ 操作注冊表

    1.       注冊表简单介绍 注冊表是为Windows NT和Windows95中全部32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息.16位驱动在Winnt (W ...

  5. myeclipse6.0下载及注冊码

    myeclipse6.0 下载地址.官方下载地址: http://www.myeclipseide.com/module-htmlpages-display-pid-4.html 本地快速下载地址: ...

  6. 【spring源代码分析】--Bean的解析与注冊

    接着上一节继续分析,DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法: protected void parseBeanDefini ...

  7. C# 系统应用之注冊表使用具体解释

    在平时做项目时,我们有时会遇到注冊表的操作,比如前面我们须要获取IE浏览器地址栏的信息.获取"我的电脑"地址栏输入的目录信息.USB近期使用信息等.注冊表项是注冊表的基本组织单位, ...

  8. MyEclipse各种版本号注冊码

    一:MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller注冊码 Subscriber:javp Subscription Code:wLR7ZL-655551-685 ...

  9. Lua 跟 C++ 的交互

    Lua 和 C++ 是这样交互的 乱七八糟的前戏: 1. 到官网下载 Lua 文件  可參考 ->  Lua 下载与配置 2. 设置环境  可參考  ->  VS 配置Lua环境 交互过程 ...

随机推荐

  1. POJ 1111(数字很吉利嘛) 简单BFS

    Image Perimeters Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8594 Accepted: 5145 Desc ...

  2. Spring的AOP机制---- AOP的注解配置---- AOP的注解配置

    3333隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约隐隐约约噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢 ...

  3. 6月10遇到的bug

    3.遇到的BUG        1.@Service(version = "1.0.0", interfaceClass = TransactionItemService.clas ...

  4. 【SQL】结构化查询语言

    一:数据查询语言(DQL:Data Query Language): 其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出.保留字SELECT是DQL(也是所有SQL)用得最 ...

  5. 复习java的例子(第一天)

    1. 编写程序:从键盘上读入一个学生成绩, 存放在变量score中,根据score的值输出其对应的成绩等级: score>=90 等级: A 70=<score<90 等级: B 6 ...

  6. VHDL之concurrent之generate

    GENERATE It is another concurrent statement (along with operators and WHEN). It is equivalent to the ...

  7. google浏览器 打印A4 最大宽度和高度px

    width: 1563px;(max) + = 分页了 + = 分页了 + = 没有分页 / ViewBag.results[].Count)); <td width="15%&quo ...

  8. js 习题

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. 整理Webview加载缓慢的解决方案

    1.https://www.cnblogs.com/xinye/p/3144139.html 2.https://www.jianshu.com/p/95d4d73be3d1

  10. 关于大XML文件与大节点处理(System.Xml.XmlTextReader)

    近期有个任务要求处理大XML文件,其中有个存了Base64的大节点(>90M,路径已知). 这种任务只能上XmlReader,即使如此大节点的处理还是头疼了一阵…… 最初查MSDN的时候,找到了 ...