Automatisches Casten eigener Klasse ermöglichen
-
Hallo allerseits,
mir stellt sich gerade folgende Frage. Angenommen, ich habe mir eine eigene Stringklasse geschrieben und möchte, dass diese nun auch in ein char* konvertiert werden kann. Das ganze soll dann ungefähr so ablaufen:char *x = myString;
bzw.
char x = (char*) myString;
Wie ermögliche ich sowas?
-
Hi,
dafür gibt's den Konvertierungsoperator, den jede Klasse definieren kann. Dann braucht's nichtmal den expliziten cast.
struct myString { operator char*(); };(geht natürlich auch für andere Typen als char*)
Aber Vorsicht: Nicht selten bringt der Konvertierungsoperator mehr Probleme als er löst - er wird nämlich sehr viel häufiger angewendet, als man so meint.
Ich habe mal gelesen (weiß nicht mehr wo), dass das einzige, was beim Design von std::string richtig gemacht worden sei, darin bestünde, dass man den char*-konvertierungsoperator weggelassen habe...Vergiss bei Deinem Ziel nicht Folgendes:
myString s; char* c; c = s; // impliziter Call des Konv-op. strcpy(c, "Dies ist ein gaaaaaaanz langer Text und niemand weiß, ob der Buffer in s das alles aufnehmen kann und ob das Objekt noch \"in sich konsistent\" ist ... z.B. ob eine intern verwaltete Länge noch stimmt ...."); delete[] c; // Huuuups, nun hat s vielleicht keinen Speicher mehr und weiß es nichtmal char st[100]; strcpy(s, "TestString"); // Hupps, eigentlich meinte der Programmierer die Variable st // ohne Konv-Op würde dieser Fehler beim Compile auffallen; so schreibt er in s.p rum und keiner weiß es...Schau Dir lieber std::sting::c_str() an ...
Gruß,
Simon2.
-
Danke, die Frage war nur am Beispiel von einem String erklärt, sozusagen war es eine abstrakte Frage :). Wozu selbst Strings definieren, wenn man std::string hat :).
Trotzdem, super Antwort, hat alles erklärt, was man dazu wissen muss.

-
Freut mich, wenn ich helfen konnte.

Danke für die Rückmeldung,
Simon2.