Index Operator überladen mit AnsiString
-
Hallo,
ich möchte bei einer Klasse den Index Operator so überladen, dass folgendes möglich is:
TMyClass *Foo = new TFoo(); ... // Foo bekommt Daten ... AnsiString str = Foo["string"];Also quasi wie es bei einer std::map auch möglich ist. Wie genau muss ich den Indexoperator überladen und was brauche ich noch dafür (Zuweisungsoperator, Copy?).
Ich habe folgendes probiert:
AnsiString & TFoo::operator[] (AnsiString str) { ... ... return mystr; }Ich bekomme aber immer den Fehler das er TFoo nicht zu AnsiString konvertieren kann.
Viele Grüße,
Christian
-
Hallo
Das einzige Problem was ich sehe ist
- Deine Klasse heißt TFoo, aber der Pointer den du im Beispiel benutzt hat den Typ TMyClass. Nur ein Schreibfehler?- Du kannst nicht auf den Pointer den []-Operator anwenden, du must den zuerst dereferenzieren
AnsiString str = (*Foo)["string"];Der Operator selber ist aber in Ordnung.
bis bald
akari
-
Hallo Akari,
vielen Dank für deine Antwort. Ans derefenzieren habe ich gar nicht mehr gedacht
. Ich werde es dann wohl statisch anlegen, um mir die Schreibarbeit zu sparen (ich habe keine Nachteile).
Beim Klassennamen habe ich mich einfach nur vertan.Grüße,
Christian
-
Den Parameter beim operator solltest du als konstante Referenz übergeben um unnötige Kopien zu vermeiden.
-
In dem Fall ist das eigentlich egal, da ein AnsiString intern nur einen "char *" als Member besitzt (mehr nicht).
Und selbst die VCL übergibt AnsiString oftmals als Kopie, aber generell sollte man Klassenobjekte als konstante Referenz übergeben.
-
Genau deswegen sagte ich das ja.

-
Hallo,
habe ich auch gemacht ;-). Das oben war ja nur ein schnell geschriebenes Beispiel. Es läuft nun zumindest so in der Anwendung.
Schönen Tag noch,
Christian