![]() |
|
#1
|
|||
|
|||
|
Hallo,
ich würde gerne ein C++ Interface für Python schreiben. Boost war natürlich mein erster Gedanke, jedoch hat Boost, was Argumente angeht, einige Limitationen die ich gerne in meinem Interface nicht haben möchte. Boost hat aber dennoch einen Ansatz der mir Recht gut gefällt. Nehmen wir einmal an ich registriere folgende Funktion in meiner Bibliothek: static PyObject *my_function(PyObject *self, PyObject *args, PyObject *kwds) Dann wird diese Funktion entsprechend aufgerufen sobald ich sie aus Python heraus aufrufe. Jetzt würde ich das PyObject struct jedoch gerne um eine Klasse wrappen, und ich suche eine Möglichkeit die Typen (PyObject*) aus dem Fuktionskopf auszutauschen. Hat jemand eine Idee wie ich da rangehen könnte? Einfach ersetzen geht ja schlecht. class MyWrappedPyObject {...} static MyWrappedPyObject *my_function(MyWrappedPyObject *self, MyWrappedPyObject *args, MyWrappedPyObject *kwds) Danke!!! googler |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
Hi,
moerchendiser2k3, 06.11.2009 12:26: > ich würde gerne ein C++ Interface für Python schreiben. Ein "C++ Interface" kann natürlich alles sein, aber wenn ich dich nicht gänzlich missverstehe, lohnt es sich nicht, das, was du vorhast, neu zu schreiben. > Boost war > natürlich mein erster Gedanke, jedoch hat Boost, was Argumente angeht, > einige Limitationen die ich gerne in meinem Interface nicht haben > möchte. Boost hat aber dennoch einen Ansatz der mir Recht gut gefällt. Ich nehme an, du hast dir noch nicht Cython angesehen? > Nehmen wir einmal an ich registriere folgende Funktion in meiner > Bibliothek: > > static PyObject *my_function(PyObject *self, PyObject *args, PyObject > *kwds) > > Dann wird diese Funktion entsprechend aufgerufen sobald ich sie aus > Python heraus aufrufe. Jetzt würde ich das PyObject struct jedoch > gerne um eine Klasse wrappen, und ich suche eine Möglichkeit die Typen > (PyObject*) aus dem Fuktionskopf auszutauschen. Hat jemand eine Idee > wie ich da rangehen könnte? Einfach ersetzen geht ja schlecht. Ich weiß nicht genau, was du mit "PyObject struct um eine Klasse wrappen" meinst, aber vielleicht hilft dir ja ein Beispiel weiter. Möglicher Cython code: # declaration of external functions: cdef extern from "some_header.h": int my_function(long some_arg, char* other_arg, int other_value) # wrapper code: cdef class MyPythonWrapper: def my_method(self, some_arg, unicode other_arg, other_value): encoded_arg = other_arg.encode('UTF-8') return my_function(some_arg, encoded_arg, other_value) Stefan |
|
#3
|
|||
|
|||
|
Hi, danke für eure Antworten. Also eine Bibliothek kommt leider nicht
in Frage, denn ich möchte mein Interface selber schreiben. Ich hatte mir soetwas gedacht: class ClassObject { private: PyObject *pointer; public: ClassObject(PyObject* op) { Py_INCREF(op); this->pointer = op; } [...] }; so dass ich diese dann in meinen überladenen Methoden nutzen kann: ClassObject* MeineFunktion(ClassObject *self, ClassObject *args, ClassObject *keywords) { [...] } Danke euch ![]() |
|
#4
|
|||
|
|||
|
moerchendiser2k3 schrieb:
> Hi, danke für eure Antworten. Also eine Bibliothek kommt leider nicht > in Frage, denn ich möchte mein Interface selber schreiben. Ich habe immer noch nicht verstanden, von was du was aufrufen willst. Aber es ist so oder so eine Menge Boilerplate-code - und dafuer rate ich dir *dringend* ein Generator-Tool an. Ich bevorzuge SIP vor SWIG. Diez |
|
#5
|
|||
|
|||
|
Ich hatte mir nur gedacht es wäre deutlich durchdachter wenn ich die
entsprechenden Methoden aus der C-API in ein C++ konformes Format bringe und die structs um eine Klasse Wrappe. SWIG klingt natürlich auch interessant, mir ging es aber um die technische Umsetzung im allgemeinen. Danke! ![]() Martin |
|
#6
|
|||
|
|||
|
moerchendiser2k3, 08.11.2009 03:30:
> Ich hatte mir nur gedacht es wäre deutlich durchdachter wenn ich die > entsprechenden Methoden aus der C-API in ein C++ konformes Format > bringe und die structs um eine Klasse Wrappe. Ich habe nicht den Eindruck, dass mit obigem Satz oder deinen bisherigen Andeutungen irgendjemandem in dieser Newsgroup klar geworden ist, was du eigentlich machen möchtest. Aber wenn dir die bisherigen Antworten und unbeantworteten Rückfragen bereits weitergeholfen haben, um so besser. Stefan |
|
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| Re: <<Interface>> | Dennis Schulmeister | Newsgroup de.comp.lang.python | 9 | 06-05-2009 07:19 PM |
| <<Interface>> | danyo | Newsgroup de.comp.lang.python | 6 | 06-02-2009 03:14 PM |
| <<Interface>> | danyo | Newsgroup de.etc.sprache.deutsch | 15 | 06-01-2009 10:58 PM |
| Midi-Interface für GEM G8-PCM? | André Jochim | Newsgroup de.rec.musik.machen | 1 | 04-29-2009 07:16 PM |
| Interface vergleichen | Michael Justin | Newsgroup de.comp.lang.delphi.misc | 2 | 01-07-2008 05:51 AM |