【发布时间】:2011-05-27 19:00:51
【问题描述】:
如何使用 luabind 绑定接受可变数量参数的函数? 基本上,我想编写自己的 print() 函数。
我知道luabind中的object类作为参数可以接受任何数据类型,最好是接收luabind::object的动态表作为参数。
【问题讨论】:
标签: parameters lua luabind
如何使用 luabind 绑定接受可变数量参数的函数? 基本上,我想编写自己的 print() 函数。
我知道luabind中的object类作为参数可以接受任何数据类型,最好是接收luabind::object的动态表作为参数。
【问题讨论】:
标签: parameters lua luabind
我在纯 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;
}
【讨论】:
看起来像 luabind doesn't support that。然而,考虑到它是一个全局函数而不是某个类的方法,你就不能使用常规的 C API 吗?它非常易于使用。例如,这是一个返回其参数类型的可变参数函数:
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);
【讨论】:
lua_pushstring)。
最好使用 string.format 并将剩余的字符串传递给日志函数。
function printf(...)
log(string.format(...))
end
这是我倾向于做的事情,然后我的应用程序可以决定将日志输出发送到文件或控制台。
【讨论】: