標籤:c++ lua enum 全域環境 枚舉
在Lua Code中註冊C/C++的枚舉非常容易,就像註冊全域變數一樣。我們使用枚舉名稱作為命名空間,來避免註冊的枚舉發生衝突。註冊的枚舉儲存在全域環境(線程環境)中。
當在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"]=MondayLUA_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)
輸出結果:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Lua 與C/C++ 互動系列:註冊枚舉enum到Lua Code中