Aufruf von Funktionszeiger



  • Hi!
    Ich habe folgendes Problem. Ich habe eine Klasse A, die ein Objekt b der Klasse B als Member hat.
    Klasse A hat eine Funktion f, die ich im Objekt b aufrufen möchte. Dazu habe ich einen Pointer p auf
    die Funktion f erstellt, welchen ich im Konstruktor dem Objekt b übergebe.

    Im Objekt b habe ich einen Funktionspointer p2 vom selben Typ wie p1 erstellt, den ich im Konstruktor
    dem übergebenen p zuweise. So weit so gut. Das kompiliert auch alles. Aber wenn ich jetzt versuche, im
    Objekt b die Funktion f über p2 aufzurufen, passiert nichts. Der Debugger springt einfach über die
    betreffende Stelle.

    Jetzt erstmal die Frage: sollte dies theoretisch überhaupt gehen? Wenn ja würde ich mal die betreffenden
    Codezeilen posten, ob dann da ein Fehler ist.

    Danke!
    Christoph



  • So wie ich deinen Text verstehe dürfte es nicht übersetzt werden. Daher: Code!


  • Mod

    SchlitzInDaHaus schrieb:

    Im Objekt b habe ich einen Funktionspointer p2 vom selben Typ wie p1 erstellt, den ich im Konstruktor
    dem übergebenen p zuweise.

    Wohl eher umgekehrt, wenn überhaupt, dann weist du den Akkusativ dem Dativ zu.

    SchlitzInDaHaus schrieb:

    Jetzt erstmal die Frage: sollte dies theoretisch überhaupt gehen? Wenn ja würde ich mal die betreffenden
    Codezeilen posten, ob dann da ein Fehler ist.

    Bitte nicht. Wenn es ein konkretes Programm ist, dass du bereits durch den Compiler gejagt hast, dann ist kein theoretisches Problem mehr. Und dann gilt weiterhin richtiges Posten
    Da Klassen im Spiel sind, haben wir es vermutlich auch gar nicht mit Funktionszeigern zu tun, sondern mit Zeigern auf nicht-statische Memberfunktionen (und das sind keine Zeiger). Was mit weniger Prosa und mehr Code sofort klar wäre. Prosa sollte nicht den Code beschreiben (dafür ist Code da), sondern Verhalten (erwartetes vs. beobachtetes).



  • Funktionszeiger sind out, guck dir mal std::functiom an.



  • Techel schrieb:

    Funktionszeiger sind out, guck dir mal std::functiom an.

    Sind die wirklich out? std::function macht noch type erasure und hat somit Overhead.



  • Alles ist relativ.
    Natürlich darf/kann/wird man noch rohe Funktionszeiger verwenden wo der Overhead von std::function stören würde.


Anmelden zum Antworten