Ja, genau, du speicherst einfach einen Zeiger oder eine Referenz auf das Elternobjekt.
Aber du brauchst hier kein Template.
Leider weiß ich nicht im Voraus, wie die Klasse lautet, das ist ja mein Problem.
Des weiteren will ich meine Funktion in einer Bibliothek einbauen und von der App aufrufen. Das Problem tritt immer wieder auf und habe dafuer keine gute Lösung.
Sagen wir mal wir haben ein in asynchrones System. Ein Haus mit vielen mechanischen Vorgängen.
Per Knopfdruck wird eine Tür aufgemacht, die Tür wird langsam aufgeklappt und wenn sie ganz offen ist geht ein grünes Licht an:
|
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
class Lampe
{
void *parent=0;
Lampe(void *Parent)
{
parent=Parent;
}
SetColour(rgb colour)
{
//...
}
};
class Schalter
{
void *parent=0;
Schalter(void *Parent)
{
parent=Parent;
}
void click()
{
//asyncrones Verfahren einleiten um die Tür langsam aufzumachen
//und ruft dann offen auf, wenn ganz offen, oder amschliessen wenn nicht.
}
void offen()
{
parent->Action(TUER_OFFEN, 1);
}
void amschliessen()
{
parent->Action(TUER_OFFEN, 0);
}
};
class Tuer
{
Schalter m_schalter;
Lampe m_Lampe;
Tuer() : m_schalter(this), m_Lampe(this)
{}
int Aktion(unsigned int id, int val)
{
switch(id)
{
case TUER_OFFEN:
m_Lampe.setColour(rgb(0,200,0));
break;
default:
m_Lampe.setColour(rgb(200,0,0));
break;
}
}
};
class Haus
{
Tuer t;
};
Haus haus;
haus.t.m_schalter.click(); // aufruf von Schalter, wenn Tuer offen ist, dann wird t benachrichtigt und ruft dann t.m_lampe.SetColour() auf
|