Как я передаю список объектов от C++ до Lua?

Это происходит потому, что webroot среды отличается от текущей папки css. Вам нужно изменить webroot или переместить папку css в текущую webroot. Обычно папка wwwroot устанавливается в окружении webroot

12
задан Watusimoto 8 May 2009 в 03:11
поделиться

2 ответа

Итак, вам нужно заполнить вектор и отправить его в Lua. Ниже приведен пример кода. Приложения - это std :: list .

typedef std::list<std::string> Applications;

Я создаю таблицу и заполняю ее данными из моего списка.

int ReturnArray(lua_State* L) {
    lua_createtable(L, applications.size(), 0);
    int newTable = lua_gettop(L);
    int index = 1;
    Applications::const_iterator iter = applications.begin();
    while(iter != applications.end()) {
        lua_pushstring(L, (*iter).c_str());
        lua_rawseti(L, newTable, index);
        ++iter;
        ++index;
    }
    return 1;
}

В результате у меня остается массив в стеке. Если бы он был возвращен в Lua, то я мог бы написать следующее:

for k,v in ipairs( ReturnArray() ) do
    print(v)
end

Конечно, пока это просто дает мне Lua-массив строк . Чтобы получить массив объектов Lua , мы просто немного подправим ваш метод:

S32 LuaRobot::findItems(lua_State *L)
{
    range = getIntFromStack(L, 1);    // Pop range from the stack
    thisRobot->findObjects(fillVector, range);  // Put items in fillVector

    // <<<< Create list of items, return it to lua >>>>

    lua_createtable(L, fillVector.size(), 0);
    int newTable = lua_gettop(L);
    for(int i=0; i < fillVector.size(); i++) {
        TestItem* item = fillVector[i];
        item->push(L);  // put an object, not a string, in Lua array
        lua_rawseti(L, newTable, i + 1);
    }
    return 1;
}
9
ответ дан 2 December 2019 в 22:23
поделиться

Работает отлично. Чтобы пояснить другим, кто читает это, метод

item->push(L)

равен

void push(lua_State *L) {  Lunar<TestItem>::push(L, this); }

. Инкапсулируя это в методе, можно сделать findItems независимым от того, что он находит.

Спасибо за помощь!

1
ответ дан 2 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: