在lua中, #操作符用於獲取對象大小, 對於table來說, 獲取的是table元素個數, 對於字符串來說獲取的是字符串長度
另外一種獲取方法是table.getn(obj), 但是這個方法已經標記為廢除了, 盡量使用通用且簡潔的#操作符
使用lua api實現此功能就需要用到lua_objlen( ),但是這個功能未在luabind中提供.所以我們順手添加一個
首先找到luabind源碼的object.hpp中取對象類型的type函數,在其下添加以下代碼
1: template<class ValueWrapper>
2: inline int obj_size(ValueWrapper const& value)
3: {
4: lua_State* interpreter = value_wrapper_traits<ValueWrapper>::interpreter(
5: value
6: );
7:
8: value_wrapper_traits<ValueWrapper>::unwrap(interpreter, value);
9: detail::stack_pop pop(interpreter, 1);
10: return lua_objlen(interpreter, -1);
11: }
重新編譯你的代碼, 就可以這樣使用luabind::obj_size( obj ) 獲取對象大小了
摘自 戰魂小築