【问题标题】:Is there any Lua table iterator wrapper for C++?是否有任何用于 C++ 的 Lua 表迭代器包装器?
【发布时间】:2013-02-24 22:43:05
【问题描述】:

我想从 Lua 代码中调用一些 C++ 函数并在参数中传递 Lua 表,如下所示:

call_cpp_function_from_lua({ x = 10, y = 20 })

call_cpp_function_from_lua 中,我想获取并使用迭代器用于 Lua 表的 C++ 表示,如下所示:

std::map<boost::variant<LuaTypesList>, boost::variant<LuaTypesList>>::iterator it = getLuaTableBegin();

我可以使用 C API 来完成,但它很乏味且容易出错,请参阅 Iterating through a Lua table from C++?

【问题讨论】:

  • 您可以在lua-users.org/wiki/IteratorsTutorial中看到使用迭代器的不同示例
  • @user1929959:他的意思是 C++ 迭代器,而不是 Lua 迭代器。
  • "但它很乏味且容易出错" 您将不得不以一种或另一种方式编写该代码。除非你要求图书馆。 C++ 迭代器为您做的唯一一件事就是将它包装在一个特定的接口中。该接口的实现是困难的部分。
  • Luabind 可以做到这一点。我不确定这是否是一个真正的答案,最初的维护者已经决定在一段时间内不再继续这个项目,所以例如您可能需要在某些配置中对其进行修补(GCC + Boost IIRC 的最新版本)。它提供的不仅仅是将数据编组到 Lua 和从 Lua 传出。
  • @Nicol Bolas:是的,我问的是带有 C++ 迭代器接口的库,它可以隐藏 Lua C API 中的迭代细节。

标签: c++ lua iterator lua-table


【解决方案1】:

QtLua library 为 Lua 表实现 C++ 迭代器。它有Value::iteratorValue::const_iterator 类,允许Lua 表的迭代。这是一个关于如何使用它们的简短示例:

// code from examples/cpp/value/iterate.cc:32

    QtLua::State state;

    // New lua table value
    state.exec_statements("table = { a = 1, b = 2, c = 3 }");

    QtLua::Value table = state["table"];

    // Iterate over lua table from C++ code
    for (QtLua::Value::const_iterator i = table.begin(); i != table.end(); i++)
      qDebug() << i.key().to_string_p()
               << i.value().to_string_p();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2018-12-03
    • 2019-01-17
    相关资源
    最近更新 更多