我正在使用 Sol2 在 Lua 和 C++ 代码之间架起桥梁。我想将数字序列从 Lua 传递到 C++。
来自 Lua:
func{3, 2, 1.5, 10}
在 C++ 中:
void func(std::vector<double> v)
{ ... }
将调用与 C++ 函数连接起来的最佳方式是什么?
如果我直接绑定(bind) C++ 函数,则会出现段错误。我想我可以写一个函数来转换 sol::table
到 std::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/