luabind - 可变数量的参数

如何使用luabind绑定接受可变数量参数的函数? 基本上,我想编写自己的print()函数。

我知道luabind中的'object'类作为参数可以接受任何数据类型,最好的选择是作为参数接受一个动态的luabind::object表。

原文链接 https://stackoverflow.com/questions/6131582

点赞
stackoverflow用户501459
stackoverflow用户501459

似乎 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);
2011-05-26 08:53:33
stackoverflow用户468527
stackoverflow用户468527

最好使用 string.format 并将剩余的字符串传递到日志函数中。

function printf(...)
    log(string.format(...))
end

这是我倾向于做的,然后我的应用程序可以决定将日志输出发送到文件或控制台。

2011-05-26 10:31:39
stackoverflow用户595105
stackoverflow用户595105

我在纯 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;
}
2011-05-26 13:42:23