使用 Sol2 在 Lua 和 C++ 之间安全传递序列

我正在使用 Sol2 桥接 Lua 和 C++ 代码。我想要将一系列数字从 Lua 传递到 C++。

从 Lua 中:

func{3, 2, 1.5, 10}

在 C++ 中:

void func(std::vector<double> v)
{ ... }

连接 C++ 函数的最佳方法是什么?

如果我直接绑定 C++ 函数,我会遇到段错误。我认为我可以编写一个函数,将 sol::table 转换为 std::vector<double>,并在存在任何类型不匹配时引发异常,但我不确定应该如何实现或者这是否是正确的方向。

点赞
用户232725
用户232725

以下是一个解决方案:

/**
 * 将一个 Lua 序列转换为 C++ 向量
 * 如果出现错误或类型错误就会抛出异常
 */
template <typename elementType>
std::vector<elementType> convert_sequence(sol::table t)
{
    std::size_t sz = t.size();
    std::vector<elementType> res(sz);
    for (int i = 1; i <= sz; i++) {
        res[i - 1] = t[i];
    }
    return res;
}

这个函数手动将 sol::table 转换成 std::vector 并逐个复制每个元素。如果表中的任何元素有错误的类型或缺失,则会出现错误。

2016-11-24 02:42:02