【问题标题】:How to convert Lua userdata to C++ class object?如何将 Lua 用户数据转换为 C++ 类对象?
【发布时间】:2015-11-21 22:25:02
【问题描述】:

我有这个 Lua 代码:

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

它返回代表人的用户数据(使用 LuaBridge 注册的 C++ 类)。所以我使用 lua_pcall 调用这个函数,现在 lua 堆栈的最后一个元素是 userdata。我的问题是如何将 -1 的用户数据转换(转换)回 C++ 中的 Person。

我试过了,但它只是终止了程序:

LuaRef lref_p(l);

lref_p.fromStack(l, -1);

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

我希望这是有道理的:)

【问题讨论】:

  • 试试Person pers = *lref_p.cast&lt;Person *&gt;();
  • 不行,还是不行! @rpattiso
  • 一个MCVE 和它如何终止的描述(带有什么错误消息)会很棒。
  • @rpattiso 经过数小时的调整和尝试,我发现解决方案 lref_p.fromStack(l, -1); 应该替换为 lref_p = LuaRef::fromStack(l, -1) 我还找到了一种更简单的方法:Person *pers = luabridge::Userdata::get&lt;Person&gt;(l, 1, false);
  • 太好了,看起来也更干净了。您可以发布您的解决方案作为答案。

标签: c++ lua luabridge


【解决方案1】:

好的,经过数小时的调整和尝试,我找到了解决方案。这是第二行:lref_p.fromStack(l, -1); 这就是问题所在。应该是lref_p = LuaRef::fromStack(l, -1);

我还发现了一种更简单、更清洁的方法:

Person *pers = luabridge::Userdata::get&lt;Person&gt;(l, 1, false);

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多