Struct mit Funktionszeigern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
makro
User
Beiträge: 25
Registriert: Sonntag 12. Juli 2009, 08:53

hallo,

in C ist es ja möglich sich eine Struktur mit Funktionszeigern zusammen zu stellen. Also so in der Art
struct {
int *(__cdecl *pFunktion1)(void);
....
}TEST;

und später die Funktion über das Strukur-Objekt aufzurufen

TEST.pFunktion1 = Funktion1;
....
TEST.pFunktion1();

Ist sowas auch in Python möglich?
also ich kenne das ctypes-Modul und mit Hilfe von "_field_" kann man sich eine Struktur zusammenstellen...Aber von welchem Typ muss ich da dann so einen "Funktionszeiger" definieren?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Du suchst also das Python-Äquivalent für Dein C-Beispiel? Das wäre eine Möglichkeit mit einem Dictionary:

Code: Alles auswählen

def f1():
    print 1

def f2():
    print 2

def f3():
    print 3

func_struct = {'func1': f1, 'func2': f2, 'func3': f3}
func_struct['func2']()
MfG
HWK
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Oder eine Klasse?

Code: Alles auswählen

class C:
    def m1(): return 1
    def m2(): return 2

c = C()
print c.m1()
Stefan
BlackJack

@makro: Oder suchst Du vielleicht ``ctypes.CFUNCTYPE(ctypes.POINTER(ctypes.c_int))``!?
makro
User
Beiträge: 25
Registriert: Sonntag 12. Juli 2009, 08:53

hallo,

erstmal danke für eure antworten!
also die ersten beiden haben mir schon geholfen!

@BlackJack:
genau, das war eigentlich das was ich gesucht hab :)...habs auch schon ausprobiert...funktioniert ebenfalls!

muss mich jetzt nur noch entscheiden, wie ich´s machen will :)
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

makro hat geschrieben:muss mich jetzt nur noch entscheiden, wie ich´s machen will :)
Was meinst du da mit entscheiden? Das sind zwei völlig verschiedene Sachen, ctypes ist dafür da um auf C-Bibliotheken zuzugreifen. Wenn du nur Funktionszeiger in Python brauchst, dann ist ctypes da das denkbar schlechteste was du nehmen kannst, denn jede Referenz auf eine Funktion ist automatisch ein Funktionszeiger. Vergiss am besten erstmal, dass es ctypes gibt.
Antworten