c++ - 使用 Sol2 将 LUA 序列安全地传递给 C++

标签 c++ vector lua

我正在使用 Sol2 在 Lua 和 C++ 代码之间架起桥梁。我想将数字序列从 Lua 传递到 C++。

来自 Lua:

func{3, 2, 1.5, 10}

在 C++ 中:

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

将调用与 C++ 函数连接起来的最佳方式是什么?

如果我直接绑定(bind) C++ 函数,则会出现段错误。我想我可以写一个函数来转换 sol::tablestd::vector<double> ,如果有任何不匹配的类型,则抛出异常,但我不确定这样做的最佳方法,或者这是否是正确的方向。

最佳答案

这是一种解决方案:

/**
 * Convert a Lua sequence into a C++ vector
 * Throw exception on errors or wrong types
 */
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 并逐个复制每个元素。如果表中的任何元素类型错误或缺少内容,它就会出错。

关于c++ - 使用 Sol2 将 LUA 序列安全地传递给 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40755871/

相关文章:

c++ - 如何根据第一个或第二个中的较大值对数组对进行排序

c++ - Linux 中的嵌套 vector

random - Lua 随机数生成器总是产生相同的数字

objective-c - 来自脚本语言(Lua、Ruby 等)的 Cocoa 桥是否需要 MacOS 上的编译部分才能工作?

c++ - exc_bad_access 错误 xcode5 c++ sdl2

c++ - 如何检测空格键?

c++ - TCS MockVita 2019 第二轮问题 : Hop Game

c++ - 保理技术找到类似的方法?

c++ - 使用步骤 c++ 构建 vector

string - Lua - string.find(x, "a - b c") 给出 nil 值