function-pointer vs member-function-pointer
-
Du könntest eine freie Funktion verwenden und der dann eine Instanz dieser Initialisierungsklasse übergeben (die für Übergabe dann binden) oder die Funktion nutzt eine globale Instanz dieser Klasse.
-
Beantworte doch mal die Frage, warum die Funktionen nicht statisch sein dürfen. Wobei die einzigen technisch gültigen Argumente hier "Zugriff auf Membervariablen" (seh ich keine) oder "Implementieren eines virtuellen Interface" (weiss ich nicht) sind. Alles andere wären Designfragen.
Kapseln kann man auch über namespaces oder statische Klassen (gibt es in C++ so nicht, aber das Pendant wäre eine Klasse mit nur statischen Funktionen).
-
@ Braunstein: Globale Instanzen einer Klasse möchte ich nicht verwenden, da mir dies nicht sehr C++ like erscheint. Was meinst Du mit "freier Funktion" ?
@ LordJaxom: Warum ich die Funktionen nicht statisch machen kann, liegt darin dass dann ja auch alle Funktionen (auch in anderen Klassen) welche von dieser statischen Funktion aufgerufen werden selber statisch sein müssten - dies würde in letzter Instanz wohl dazu führen, dass ich meine ganze FEM-software als statisch deklarieren müsste. Schließlich bedeutet ja der Aufruf dieser Funktion (welche OPT++ haben will) bei mir soviel wie: mache eine komplette FEM Simulation !
-
Warum ich die Funktionen nicht statisch machen kann, liegt darin dass dann ja auch alle Funktionen (auch in anderen Klassen) welche von dieser statischen Funktion aufgerufen werden selber statisch sein müssten
Nein. Es müssen lediglich alle Elemente, auf du zugreifst statisch sein, ausser du übergibst die natürlich an die Funktion (von einem Interface mal abgesehen). Der aufrufende muss nicht statisch sein, um eine statische Funktion aufrufen zu können.
-
@ drakon: nur zum Verständnis: wenn ich in Klasse A eine statische Funktion habe und in dieser dann eine Funktion aus Klasse B aufrufen will, muss dann die Funktion in Klasse B statisch sein? Und was ist, wenn die Funktion in Klasse B nach dem Aufruf eigene Member (aus Klasse
ändern will? Was muss dann alles statisch sein?Kann der folgende Code so richtig sein?
class A{ private: B* Bpt; ... public: static void do_sth() { Bpt->do_sth(); } ... } class B{ private: double foo; // muss dieser member static sein ??? public: void do_sth() { foo = 42.; } // muss dieser member static sein ??? }
-
Nein. Das geht so nicht.
B* Bpt;Müsste statisch sein. Aber B selber muss keine statischen Member haben, da das Objekt ja bestimmt ist.
Du könntest das Objekt ja übergeben, dann muss Bpt nicht statisch sein.
Habe jetzt nicht den ganzen Thread gelesen, weiss darum nicht, was du genau brauchst.
Ev kannst du dir ja überlegen, ob du überhaupt mehrere Instanzen von A brauchst/erlaubst.