zu 4) Du kannst zwar mit der richtigen Syntax einen Zeiger auf eine Member-Methode erzeugen, aber die wirst du nicht als WinMain registrieren können, weil Windows nicht weiss, welche this Zeiger zu benutzen ist.
Der this Zeiger wird für jede Methode einer Klasse automatisch als "Argument" übergeben (auch wenn man das nirgends selbst so hinschreiben muss).
Vermutlich würde es gehen, wenn sie static ist, weil sie dann keinen this Zeiger braucht. Aber wie man das vernünftigerweise machen sollte, kann ich aber aus dem Stand auch nicht sagen
Für diejenigen, die es interessiert, so kann man einen Zeiger auf eine Klassen-Methode erzeugen.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class Class
{
public:
void foo (int);
void bar (int);
static void fun (int);
};
typedef void (Class::*_ClassFunPtr) (int); // Typ fuer den Methodenzeiger
typedef void (*_StaticIntFun) (int);
int main ()
{
Class c1;
Class c2;
Class* c3 = c2;
_ClassFunPtr fun_ptr1 = &Class::foo; // Methode foo im Zeiger merken
// und in verschiedenen Objekten aufrufen.
(c1.*fun_ptr1) (1); // sieht lustig aus, ist aber richtig ;)
(c3->*fun_ptr1) (1);
fun_ptr1 = &Class::bar; // Andere Methode merken
// und in verschiedenen Objekten aufrufen.
(c1.*fun_ptr1) (1);
(c3->*fun_ptr1) (1);
// statische Methode braucht kein Objekt
_StaticIntFun fun_ptr2 = &Class::fun;
(*fun_ptr2) (1);
return 0;
}
|
Methoden-Zeiger sind aber kein einfaches Thema und es gibt fast immer einen Weg, wie man sie vermeiden kann. Wenn man allerdings tiefer in die C++ Template Bibliothek einsteigt, wird man um sie nicht wirklich rumkommen, weil die Algorithmen dort starken gebrauch von ihnen machen.
Wichtig ist dabei niemals zu vergessen, dass eine Klassen-Methode niemals ohne Objekt der entsprechenden Klasse aufgerufen werden kann. Ausnahmen sind "static" Methode, die keinen this Zeiger haben.
MfG
Rainer