luabind - переменное количество параметров - PullRequest
1 голос
/ 26 мая 2011

Как связать функцию с luabind, которая принимает переменное количество параметров?По сути, я хочу написать свою собственную функцию print ().

Я знаю, что класс object в luabind в качестве параметра может принимать любой тип данных, лучше всего было бы получить динамическую таблицу * 1004.* как параметр.

Ответы [ 3 ]

5 голосов
/ 26 мая 2011

Я сделал смесь между чистым 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;
}
3 голосов
/ 26 мая 2011

Похоже, 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);
2 голосов
/ 26 мая 2011

Лучше использовать string.format и передать оставшуюся строку в функцию журнала.

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

Это то, что я склонен делать, и тогда мое приложение может решить отправить вывод журнала в файл или консоль.

...