Как преобразовать пользовательские данные Lua в объект класса С++?

У меня есть этот код Lua:

function returnPerson()
    local person = Person("Mike", 23)     
    return person
end

Он возвращает пользовательские данные, представляющие Person (класс C++, зарегистрированный с использованием LuaBridge). Итак, я вызываю эту функцию, используя lua_pcall, и теперь последним элементом стека lua являются пользовательские данные. Мой вопрос заключается в том, как мне преобразовать (преобразовать) эти пользовательские данные в -1 обратно в Person в C++.

Я пробовал это, но это просто завершает программу:

LuaRef lref_p(l);

lref_p.fromStack(l, -1);

Person pers = lref_p.cast<Person>();

Я надеюсь, что это имеет смысл :)


person user3071028    schedule 27.08.2015    source источник
comment
попробуй Person pers = *lref_p.cast<Person *>();   -  person ryanpattison    schedule 27.08.2015
comment
Нет, все еще не работает! @rpattiso   -  person user3071028    schedule 27.08.2015
comment
Было бы здорово иметь MCVE и описание того, как он завершается (с каким сообщением об ошибке).   -  person ryanpattison    schedule 27.08.2015
comment
@rpattiso После нескольких часов настройки и попыток я нашел решение lref_p.fromStack(l, -1); следует заменить на lref_p = LuaRef::fromStack(l, -1) Также я нашел более простой способ сделать это: Person *pers = luabridge::Userdata::get<Person>(l, 1, false);   -  person user3071028    schedule 28.08.2015
comment
Отлично, это тоже выглядит чище. Вы можете опубликовать свое решение в качестве ответа.   -  person ryanpattison    schedule 28.08.2015
comment
@rpattiso У вас есть идеи, почему в качестве второго аргумента здесь get<Person>(l, 1, false) мне пришлось использовать 1 вместо -1, поскольку этот параметр должен быть индексом в стеке. Функция имеет assert(index > 0) Я понятия не имею, почему.   -  person user3071028    schedule 28.08.2015


Ответы (1)


Итак, после нескольких часов настройки и попыток я нашел решение. Это была вторая строка: lref_p.fromStack(l, -1); это была проблема. Должно быть lref_p = LuaRef::fromStack(l, -1);

Также я нашел более простой и чистый способ сделать это:

Person *pers = luabridge::Userdata::get<Person>(l, 1, false);

person user3071028    schedule 28.08.2015