¿Cómo paso una lista Python de mi tipo de objeto ClassName
a una función C++ que acepta un vector<ClassName>
?Pasar la lista de Python al vector C++ usando Boost.python
Lo mejor que encontré es algo como esto: example. Lamentablemente, el código falla y no puedo entender por qué. Esto es lo que solía:
template<typename T>
void python_to_vector(boost::python::object o, vector<T>* v) {
try {
object iter_obj = object(handle<>(PyObject_GetIter(o.ptr())));
return;
for (;;) {
object obj = extract<object>(iter_obj.attr("next")());
// Should launch an exception if it cannot extract T
v->emplace_back(extract<T>(obj));
}
} catch(error_already_set) {
PyErr_Clear();
// If there is an exception (no iterator, extract failed or end of the
// list reached), clear it and exit the function
return;
}
}
Muchas gracias. ¿Hay alguna manera de hacer que la conversión de la lista al vector sea automática? –
Lamentablemente, no. Sin embargo, puede tener una función escrita en el lado de python que tome una lista, la convierta en un vector y la pase a la función de barra. Eso ayudará a ocultar un poco la fealdad de C++. –