سؤال

أنا أكتب بعض روابط Swig/Python لبعض كود C ++. هذا لما يسمى واجهة برمجة تطبيقات kinect العرضية ، لدي وظائف المحرك والمحرك عمل. لا يبدو أن عمليات الاسترجاعات إلى فئة المستمع التي تملأ وتملأ المخازن المؤقتة RGB وعمقها يتم استدعاؤها من SWIG. من الواضح أن مؤشرات ترابط التقاط البيانات تبدأ وبدء تشغيل وحدة المعالجة المركزية ، ولكن لا توجد خطوط تصحيح من رد الاتصال. ما هي الطريقة الأفضل لملء المخازن المؤقتة للبيانات والوصول إليها بسهولة من بيثون؟

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) {};
};

إليك فئة المستمع مع الأساليب الافتراضية ، هل يمكن استخدام النسخة المغلفة للبيثون من هذه الفئة لروث المستمعين لفئة 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);
  }
}

خيارات أفضل؟

هل كانت مفيدة؟

المحلول

هناك طريقة باستخدام ميزة المخرجين. تمكينه لوكيل KinectListener الخاص بك ، سطر واحد من التعليمات البرمجية:

%feature("director") KinectListener

ثم يمكنك أن ترث من فئة KinectListener في كود Python وتحديد وظائفك.

نصائح أخرى

عن طريق الصدفة ، صادفت أن أبحث في عمليات الاسترجاعات مع SWIG في الوقت الحالي.

ال توثيق SWIG 2.0 يقول هذا:

يوفر SWIG دعمًا كاملاً لمؤشرات الوظائف شريطة أن يتم تعريف وظائف رد الاتصال في C وليس باللغة المستهدفة. ... ومع ذلك ، يمكن استخدام وظائف C الحالية كوسائط شريطة تثبيتها كثوابت. طريقة واحدة للقيام بذلك هي استخدام التوجيه الثابت ٪ مثل هذا ...

أخطط لكتابة رد اتصال C مع JNI المكتوب يدويًا للاتصال بـ Java. إذا كان هناك طريقة أخرى ، أحب أيضًا سماع ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top