2016-11-23 73 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並複製每個元件一個接一個。如果表中的任何元素具有錯誤的類型,或者缺少某些元素,則會出錯。

相關問題