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

时间:2016-11-23 04:07:51

标签: c++ vector lua

我正在使用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>的函数,如果存在任何不匹配的类型,则会抛出异常,但我不确定最佳方法,或者这是正确的方向。

1 个答案:

答案 0 :(得分:0)

这是一个解决方案:

/**
 * 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并逐个复制每个元素。如果表中的任何元素具有错误的类型,或者缺少某些内容,则会出错。