在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 ) 获取对象大小了