Und wieder mal programmiere ich was privates - oder besser, ich re-lerne C++. Das konnte ich schonmal recht gut...
Dabei stolpere ich, mal wieder muss ich bekennen, über die Beschränkungen von Forward Deklarationen in C++, die MS in C# alle elegant beseitigt hat.
Jawohl, dies ist ein ausdrückliches Lob an Microsoft.
in C# ist es egal, wo im Programm eine Klasse deklariert wird. man kann sie überall im Code uneingeschränkt verwenden.
Eine Reihe verschiedener Klassen, deren Instanzen jeweils auf Instanzen der anderen Klassen verweisen müssen weil sie deren Daten zum Arbeiten brauchen, ist gar kein Problem in C#.
Nicht so in C++.
Hier ist es wichtig, dass man als Programmierer weiß, wann der Compiler die jeweilige Definition liest.
Vorwärtsverweise können in Templates gar nicht verwendet werden. Warum nicht, wenn das Ganze ohne Template, explizit als Klasse formuliert, doch schon funktioniert?
Oder das hier:
Ich habe folgenden Code in einer Klassetemplate, und er funktioniert prächtig.
template <typename T> class prop {
protected:
T _val;
virtual T setter(T v) { return _val = v; }
public:
T operator= (T v) { return setter(v); }
ich kann in einer anderen Klasse Properties verschiedenster Typen definieren, auf die ich zugreifen kann als wären sie direkt zugreifbar, in Wirklichkeit stecht aber ein Setter dahinter (und ein Getter) Das spart Schreibarbeit, weil ich im Code dann hauptsächlich Zuweisungen mit "=" stehen habe, die ich für wesentlich leserlicher halte als Zuweisungsmethoden.
Aber wenn ich von prop<char*> ableite um den Setter zu überschreiben streikt der Compiler weil er angeblich keine passende Methode für den Zuweisungsoperator finden kann.
Hallo? Da steht sie, in der Basisklasse, und dort hat sie bereits funktioniert.
In C# habe ich dieses Problem nicht, da sind setter und getter zu Ende gedacht und im Sprachumfang voll integriert.
So, genug Dampf abgelassen,jetzt geht's mir wieder etwas besser
0 Kommentare
Empfohlene Kommentare
Keine Kommentare vorhanden