004
01.12.2009, 15:17 Uhr
0xdeadbeef
Gott (Operator)
|
Ich habe ein bisschen die Vermutung, dass das Hauptverständnisproblem die Natur von Templates (Vorlagen) ist. Ist wahrscheinlich auch nicht deine Schuld; es gibt viele schlechte Bücher über C++, in denen von Template-Klassen und Template-Funktionen die Rede ist.
Es ist wichtig zu verstehen, dass Klassenvorlagen keine Klassen und Funktionsvorlagen keine Funktionen sind. In meinem Beispiel oben ist C keine Klasse. Lies das gern zweimal, es ist wichtig. Es handelt sich bei C um eine Vorlage für eine Klasse, die zu verschiedenen Klassen konkretisiert werden kann. Zum Beispiel ist C<C1> eine aus C konkretisierte Klasse.
Dementsprechend kannst du C auch nicht wie eine Klasse behandeln. Es ist zum Beispiel nicht möglich,
C++: |
void foo(C const &c); // FALSCH!
|
zu schreiben, weil Parameter Typen sein müssen und C keiner ist (sondern lediglich eine Vorlage für einen).
Was ich oben mache, ist, eine abstrakte Basisklasse basic_C zu definieren, die das Interface bereitstellt und von der alle aus C konkretisierten Klassen erben, so dass alle aus C konkretisierten Klassen als Typ basic_C behandelt werden können. Ob du sie dabei als Referenz oder als Zeiger weiterleitest - naja, in der Regel sind Referenzen hübscher, weil man sich schon sehr anstrengen muss, um eine Referenz ins Nichts zeigen zu lassen, aber funktionieren wird beides. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |