Lua教程(二十二) userdata

2022-09-21 02:18:09 字數 1314 閱讀 2547

在lua中可以通過自定義型別的方式與c語言**更高效、更靈活的互動。這裡我們通過乙個簡單完整的示例來學習一下lua中userdata的使用方式。需要說明的是,該示例完全來自於programming in lua。其功能是用c程式實現乙個lua的布林陣列,以提供程式的執行效率。見下面的**和關鍵性注釋。  

複製** **如下:

#include

#include

#include

#include

#define bits_per_word (char_bit * sizeof(int))

#define i程式設計客棧_word(i)     ((unsigned int)(i))/bits_per_word

#define i_bit(i)      (1 << ((unsigned int)(i)%bits_per_word))

typedef struct numarray numarray;

extern "c" int newarray(lua_state* l)

extern "c" int setarray(lua_state* l)

extern "c" int getarray(lua_state* l)

extern "c" int getsize(lua_state* l)

extern "c" int array2string(lua_state* l)

static lual_reg arraylib_f = ,

};static lual_reg arraylib_m = ,

,&nbwww.cppcns.comsp;   ,

, //print(a)時lua會呼叫該元方法。

};extern "c" __declspec(dllexport)

int luaopen_testuserdata(lua_s程式設計客棧tate* l)

輕量級userdata:  之前介紹的是full userdata,lua還提供了另一種輕量級userdata(light userdata)。事實上,輕量級userdata僅僅表示的是c指標的值,即(void*)。由於它只是乙個值,所以不用建立。如果需要將乙個輕量級userdata放入棧中,呼叫lua_pushlightuserdata即可。full userdata和light userdata之間最大的區別來自於相等性判斷,對於乙個full userdata,它只是與自身相等,而light userdata則表示為乙個c指標,因此,它與所有表示同一指標的light userdata相等。再有就是light userdata不會受到垃圾收集器的管理,使用時就像乙個普通的整型數字一樣。

本文位址:

二十二,雜感

恩,二十二了,感覺是個turning point。二十二是中國男公民法定結婚年齡,但是因為我連女朋友都沒有,所以,這個話題暫不談論。其實剛到上海的時候,就準備把那些將要發生的辛酸點滴記錄下來,可是不知怎麼的,真正到辛酸的時候,卻不想去記憶了。那些歷程確實值得懷念,但是想起來就感覺不好,或許這就是所謂...

二十二 封裝

namespace demo7 this.age age this public int getage public void stuinfo 年齡為 方式一 public int age 方式二 private int age 字段 內部 public int age 讀取許可權 set 預設屬性...

HTML 頭部(二十二)

頭元素包含關於文件的概要資訊,也稱為元資訊 meta information meta 意為 關於某方面的資訊 可以這麼說,元資料 meta data 是關於資料的資訊,而元資訊是關於資訊的資訊。頭元素內的元素不會被瀏覽器顯示出來。根據 html 標準,僅有幾個標籤在 html 的頭部分是合法的。它...