2016-11-23 152 views
2

我使用Sol2来桥接Lua和C++代码。我想从Lua传递数字序列到C++。使用Sol2安全地将LUA序列传递给C++

从Lua:

func{3, 2, 1.5, 10} 

在C++:

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

什么是连接与C++函数调用的最好方法?

如果我直接绑定C++函数,我得到一个段错误。我想我可以编写一个函数,将sol::table转换为std::vector<double>,如果有任何不匹配的类型,则会抛出异常,但我不确定是否执行此操作的最佳方法,或者如果这是正确的方向。

回答

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

相关问题