luabind-可变数量的参数

| 如何使用luabind绑定接受可变数量参数的函数? 基本上,我想编写自己的print()函数。 我知道luabind中的“ 0”类作为参数可以接受任何数据类型,最好是将动态表“ 1”作为参数。     
已邀请:
我在纯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不支持该功能。但是,鉴于它是全局函数,而不是某个类上的方法,难道您不可以为此使用常规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);
    

bab

最好使用string.format并将剩余的字符串传递到日志函数中。
function printf(...)
    log(string.format(...))
end
我倾向于这样做,然后我的应用程序可以决定将日志输出发送到文件或控制台。     

要回复问题请先登录注册