Meinews.de  


Zurück   Meinews.de > Forum > Newsgroups de.comp.lang.* Forum > Newsgroup de.comp.lang.python
Registrieren FAQ Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Newsgroup de.comp.lang.python Programmieren mit Python.

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11-06-2009, 11:26 AM
moerchendiser2k3
 
Beiträge: n/a
Standard C++ Interface

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
Mit Zitat antworten
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Meinews.de
Standard Sponsored Links

  #2  
Alt 11-06-2009, 12:54 PM
Stefan Behnel
 
Beiträge: n/a
Standard Re: C++ Interface

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
Mit Zitat antworten
  #3  
Alt 11-07-2009, 02:34 AM
moerchendiser2k3
 
Beiträge: n/a
Standard Re: C++ Interface

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
Mit Zitat antworten
  #4  
Alt 11-07-2009, 12:49 PM
Diez B. Roggisch
 
Beiträge: n/a
Standard Re: C++ Interface

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
Mit Zitat antworten
  #5  
Alt 11-08-2009, 02:30 AM
moerchendiser2k3
 
Beiträge: n/a
Standard Re: C++ Interface

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
Mit Zitat antworten
  #6  
Alt 11-08-2009, 01:11 PM
Stefan Behnel
 
Beiträge: n/a
Standard Re: C++ Interface

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
Mit Zitat antworten
 
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen
Es ist dir nicht erlaubt, auf Beiträge zu antworten
Es ist dir nicht erlaubt, Anhänge anzufügen
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten

vB Code ist An
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus

Ä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


Alle Zeitangaben in WEZ. Es ist jetzt 09:38 AM Uhr.





Powered by: vBulletin Version 3.6.7 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Forum SEO by Zoints