Estoy escribiendo algunos enlaces SWIG/Python para algunos códigos C++. Esto es para lo que se llama la API accidental de Kinect, tengo las funciones de motor y led working. Las devoluciones de llamada a la clase Listener que analizan y completan los búferes RGB y Depth parecen no ser llamados desde SWIG. Los hilos de captura de datos, evidentemente, se inician y comienzan a acaparar la CPU, pero no salen líneas de depuración de la devolución de llamada. ¿Cuál sería la mejor manera de rellenar los búferes de datos y acceder fácilmente a ellos desde python?SWIG enlaces C++ con devolución de llamada
class KinectListener
{
public:
virtual ~KinectListener(){};
virtual void KinectDisconnected(Kinect *K) {};
virtual void DepthReceived(Kinect *K) {};
virtual void ColorReceived(Kinect *K) {};
virtual void AudioReceived(Kinect *K) {};
};
Aquí es la clase de escucha con los métodos virtuales, puede el Python envuelto versión de esta clase se utiliza para heredar oyentes para la clase de C++? Agregué un oyente mínimo en C++ y ahora el trabajo restante es acceder a las matrices de manera eficiente con mapas de tipos. Actualmente estoy usando este ingenuo tipo de mapa
%typemap(out) unsigned short [ANY] {
int i;
$result = PyList_New($1_dim0);
for (i = 0; i < $1_dim0; i++) {
PyObject *o = PyInt_FromLong((long)$1[i]);
PyList_SetItem($result,i,o);
}
}
¿Mejores opciones?
Tuve la misma pregunta: la respuesta de N0vember lo responde. En lugar de recibir un puntero a una función para llamar, reciba un puntero a una clase polimórfica donde conozca el nombre de la función que planea llamar. – Jonathan