Overloada "Bert"+"Sven" i C++?

Permalänk

Overloada "Bert"+"Sven" i C++?

Hallå.
Jag har skrivit en stringklass och skulle nu väldigt gärna vilja veta om det går att få en operator att acceptera nedanstående exempel?

CString bert = "ASd"+"Bert"; bert = "asd"+"asd"+"asdad";

Har fixat de andra operatorerna som jag tyckte jag behövde. Men jag har problem med att lyckas med dedär.

Går det ens?

Permalänk
Glömsk

Nepp. Kompilatorn kommer inte begripa att du vill casta pekare (C-strängarna) till din stringklass innan addition, som inte fungerar för vanliga C-strängar. Du lär dock kunna få detta att fungera:

CString bert = "ASd"+"Bert"; bert = CString("asd")+CString("asd")+CString("asdad");

Med implicit castning kan du kanske även få detta att fungera:

CString bert = "ASd"+"Bert"; bert = CString("asd")+"asd"+"asdad";

Du måste dock ha rätt typ någonstans till höger om =-tecknet. Vet inte vad C++-standarden säger om evalueringsordning i det här fallet, får någon annan svara på.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk

Tack för ditt svar. De exempel som du skrev fungerar redan.

Nu har jag ett macro som heter _S så jag slipper skriva CString men det känndes inte som en stabil lösning. Men jag får väll leva med det.

Edit: Eller nedanstående fungerar inte.

CString bert = "ASd"+"Bert";

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Psionicist
Du måste dock ha rätt typ någonstans till höger om =-tecknet. Vet inte vad C++-standarden säger om evalueringsordning i det här fallet, får någon annan svara på.

Eftersom additionsoperatorn är vänsterassosciativ så blir det alltid vänster till höger, du måste alltså alltid ha din typ längst till vänster sedan kan man länka på en massa andra typer.

Ex:

"test" + Stringklass("test2");

kompilerar inte.

Ex:

Stringklass("test") + 2 + "hej" + 0.1f;

kompilerar fint bara du har rätt operatorer definierade för Stringklass.

Permalänk
Citat:

Ursprungligen inskrivet av jesper_o
"test" + Stringklass("test2");

Går dock att skapa en global operator för att få det att fungera.

CString operator+(const char* _carr, CString& _str) { ... } ... { ... CString bert = "Berit"+_S("Sven"); ... }

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av alexandersson
Går dock att skapa en global operator för att få det att fungera.

Ja just det, det stämmer