دمج تطبيقات Python لواجهة C في برنامج C موجود، مما يسمح لتطبيقات Python يمكن استخدامها بسلاسة داخل البرنامج الأكبر.
ضع في اعتبارك واجهة C التالية التعريف:
class myif {
public:
virtual float myfunc(float a) = 0;
};
تمكين تعدد الأشكال باستخدام SWIG:%module(directors=" 1") الوحدة النمطية %include "myif.h"
%module(directors="1") module %include "myif.h"
وحدة الاستيراد فئة MyCl(module.myif): تعريف __init__(الذات): Module.myif.__init__(الذات) ديف myfunc(النفس, أ): return a * 2.0
import module
class MyCl(module.myif):
def __init__(self):
module.myif.__init__(self)
def myfunc(self, a):
return a * 2.0
Py_Initialize();
Py_Initialize();
استيراد لغة بايثون الوحدة النمطية:PyObject *module = PyImport_Import(PyString_FromString("mycl"));
Py_Initialize();
إنشاء مثيل وتنفيذ الوظيفة:PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict); double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
PyObject *instance = PyRun_String("mycl.MyCl()", Py_eval_input, dict, dict);
double ret = PyFloat_AsDouble(PyObject_CallMethod(instance, "myfunc", (char *)"(O)" ,PyFloat_FromDouble(input)));
Py_Finalize();
Py_Finalize();
إعادة ترجمة وحدة SWIG:
%module(directors="1") module %include "myif.h"
وظيفة المساعدة للتحويل:
g -DSWIG_TYPE_TABLE=myif -Wall -Wextra -shared -o _module.so myif_wrap.cxx -I/usr/include/python2.7 -lpython2.7
التنفيذ النهائي في main.cc
myif *python2interface(PyObject *obj) {
...
}
int main() {
...
myif *inst = python2interface(instance);
std::cout myfunc(input) تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3