Я пишу некоторые привязки SWIG/Python для некоторого кода на C++. Это для того, что называется Kinect Accidental API, у меня есть функции двигателя и светодиода working. Обратные вызовы к классу Listener, которые анализируют и заполняют буферы RGB и глубины, похоже, не вызываются из SWIG. Потоки захвата данных, очевидно, запускаются и начинают запугивать CPU, но отладочные линии от обратного вызова не проходят. Что было бы лучшим способом заполнения буферов данных и их легко получить от python?Связи SWIG C++ с обратным вызовом
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) {};
};
Вот класс слушателя с виртуальными методами, может Python обернутой версию этого класса можно использовать, чтобы наследовать слушатель для класса C++? Я добавил минимальный прослушиватель в C++, и теперь оставшаяся работа заключается в эффективном доступе к массивам с помощью typemaps. В настоящее время я использую эту наивную типографию
%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);
}
}
Лучшие варианты?
У меня был тот же вопрос - ответ N0vember отвечает на него. Вместо того, чтобы получать указатель на вызываемую функцию, получите указатель на полиморфный класс, где вы знаете имя функции, которую вы планируете вызывать. – Jonathan 2011-02-05 06:14:00