转自:http://blog.csdn.net/sunning9001/article/details/46659163
在Lua Code中注册C/C++的枚举非常容易,就像注册全局变量一样。我们使用枚举名称作为命名空间,来避免注册的枚举发生冲突。注册的枚举存储在全局环境(线程环境)中。
当在Lua Code中访问枚举时,通过名称来访问对应的值。
sample_9.cpp c++代码如下:
-
- 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)
- {
- lua_newtable(L);
-
- 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);
-
- 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)
输出结果: