C++ Interface

06/11/2009 - 12:26 von moerchendiser2k3 | Report spam
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
 

Lesen sie die antworten

#1 Stefan Behnel
06/11/2009 - 13:54 | Warnen spam
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

Ähnliche fragen