如何使用接受可变数量参数的luabind绑定函数? 基本上,我想编写自己的print()函数。
我知道luabind中的object
类作为参数可以接受任何数据类型,最好是接收luabind::object
的动态表作为参数。
答案 0 :(得分:5)
我在纯lua C API和luabind之间进行了混合:
int myPrint(lua_State* L)
{
int argCount = lua_gettop(L);
for(int i = 1; i <= argCount; i++)
{
luabind::object obj(luabind::from_stack(L, i));
switch(luabind::type(obj))
{
case LUA_TSTRING:
cout << luabind::object_cast<std::string>(obj);
break;
case LUA_TNUMBER:
cout << luabind::object_cast<double>(obj);
break;
case LUA_TBOOLEAN:
cout << boolalpha << luabind::object_cast<bool>(obj);
break;
case LUA_TNIL:
cout << "#Nil#";
break;
default:
cout << "#Unknown type '" << luabind::type(obj) << "'#";
break;
}
}
cout << endl;
return 0;
}
答案 1 :(得分:3)
看起来像luabind doesn't support that。但是,鉴于它是一个全局函数而不是某个类的方法,你难道不能只使用常规的C API吗?它非常易于使用。例如,这是一个vararg函数,它返回它的参数类型:
static int types (lua_State* L) {
int argc = lua_gettop(L);
for (int i=1; i <= argc; ++i) {
lua_pushstring(L, lua_typename(L, lua_type(L, i)));
}
return argc;
}
...
lua_register(L, "types", types);
答案 2 :(得分:2)
最好使用string.format并将剩余的字符串传递给日志函数。
function printf(...)
log(string.format(...))
end
这是我倾向于做的,然后我的应用程序可以决定将日志输出发送到文件或控制台。