Eine statische Funktion Mitglied einer Klasse ist einfach eine reguläre Funktion in der Namespace-Klasse:
Statische Elemente einer Klasse sind nicht mit den Objekten der Klasse zugeordnet sind: sie sind unabhängig Objekte mit statischer Speicherdauer oder reguläre Funktionen, die im Namensraumbereich definiert sind, nur einmal im Programm.
cppreference.com
In Ihrem Beispiel wäre die Art von A::f1
void(A*)
sein und die Art der A::f2
würde void(A&)
sein. Insbesondere müssen statische Funktionen keine Instanz aufrufen.
Alternativ erfordern die nicht statischen Elementfunktionen do, dass eine Instanz aufgerufen werden muss. Sie müssten pointers to class members verwenden. In Ihrem Beispiel würden Sie &A::f1
und &A::f2
verwenden und ihre Typen wären (void)A::*f1(A*)
bzw. (void)A::*f2(A&)
. Wenn Zeiger auf Elementfunktionen wie normale Funktionszeiger behandelt würden, wie würden sie heißen? Sie benötigen eine Objektinstanz, auf die der Zeiger this
zeigen kann.
Sie einen Zeiger auf eine Member-Funktion auf ein Objekt umwandeln kann, der den ()
Operator und verhält sich wie eine Funktion (auch bekannt als ein functor) mit std Überlastungen :: bind:
A a;
std::bind(&A::f1, &a); // &a is the value of this
jedoch functors nicht haben derselbe Typ wie Funktionszeiger. Ich empfehle std::function
in der functional
Header-Datei anstelle von Funktionszeigern, weil sie für Funktoren Platz bieten.
(Siehe http://en.cppreference.com/w/cpp/language/pointer für weitere Informationen).
siehe [static member] (http://en.cppreference.com/w/cpp/language/static) und siehe [Zeiger auf Funktion] (http://de.cppreference.com/w/cpp/language/pointer#Pointers_to_functions) – Oliv