Lua 與C/C++ 互動系列:註冊枚舉enum到Lua Code中

來源:互聯網
上載者:User

標籤: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中

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.