encuadernaciones TRAGO C ++ con devolución de llamada
Pregunta
Estoy escribiendo algunos enlaces SWIG / Python para algo de código C ++. Esto es lo que se llama la API de Kinect accidental, tengo el motor y funciones dirigidas de trabajo . Las devoluciones de llamada a la clase de escucha de los cuales de análisis y poblar no parecen del RGB y tampones de profundidad para conseguir llamados desde el TRAGO. Los hilos de captura de datos, evidentemente, puesta en marcha y empiezan acaparando la CPU, pero no hay líneas de depuración de la devolución de llamada vienen a través. ¿Cuál sería una mejor manera de memorias intermedias de datos poblar y fácilmente acceder desde pitón?
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) {};
};
Esta es la clase de escucha con los métodos virtuales, puede envuelta la versión Python de esta clase se utiliza para los oyentes heredan de la clase de C ++? Añadí un oyente mínima en C ++ y ahora el trabajo restante es acceder a la arrays de manera eficiente con typemaps. Actualmente estoy usando este typemap ingenua
%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);
}
}
opciones mejor?
Solución
Hay una manera de utilizar la función de directores. Habilitarlo para su proxy KinectListener, una línea de código:
%feature("director") KinectListener
A continuación, puede heredar de la clase KinectListener en el código python y definir sus funciones.
Otros consejos
Por coincidencia, sucede que se busca en las devoluciones de llamada con el TRAGO en este momento.
El TRAGO documentación 2.0 dice que esto :
SWIG proporciona soporte completo para los punteros de función, siempre que las funciones de devolución de llamada se definen en C y no en el idioma de destino. ... Sin embargo, las funciones de C existentes se pueden utilizar como argumentos siempre se instalan como constantes. Una forma de hacer esto es usar la directiva% constante como este ...
tengo la intención de escribir una devolución de llamada C con JNI escrita a mano para poner en Java. Si hay otra manera, también me encantaría escucharlo.