2016-11-23 19 views
2

Ich verwende Sol2, um zwischen Lua und C++ - Code zu überbrücken. Ich möchte Zahlenfolgen von Lua nach C++ weitergeben.Verteilen Sie LUA-Sequenzen mit Sol2 sicher an C++

Von Lua:

func{3, 2, 1.5, 10} 

In C++:

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

Was ist der beste Weg, um den Anruf mit der C++ Funktion zu verbinden?

Wenn ich die C++ Funktion direkt binde, bekomme ich einen segfault. Ich denke, ich kann eine Funktion schreiben, die eine in eine std::vector<double> konvertiert, Ausnahmen werfen, wenn es irgendwelche nicht übereinstimmenden Typen gibt, aber ich bin mir nicht sicher, der beste Weg, dies zu tun, oder wenn dies die richtige Richtung ist.

Antwort

0

Hier ist eine Lösung:

/** 
* 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; 
} 

dies manuell wandelt die sol::table in eine std::vector und Kopien jedes Element einzeln. Es tritt ein Fehler auf, wenn Elemente in der Tabelle den falschen Typ haben oder wenn Dinge fehlen.

Verwandte Themen