我正在使用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>
的函数,如果存在任何不匹配的类型,则会抛出异常,但我不确定最佳方法,或者这是正确的方向。
答案 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
并逐个复制每个元素。如果表中的任何元素具有错误的类型,或者缺少某些内容,则会出错。