conversie implicita de la int la enum

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: conversie implicita de la int la enum

Post by Dragos Cojocari » 12 Mar 2008, 17:16

Ovidiu Cucu wrote:Acuma, gadiland putin la OO-ul de care se face atata caz in ziua de azi, toata lumea il cunoaste (pe de rost), dar foarte putini il aplica (in practica) asa cum trebuie:

N-ar fi oare mai eleganta o clasa (abstracta) Command din care deriva Connect, Disconnect, Reset, s.a.m.d?
Eu cred ca da. In plus scapi si de acel enum "enervant" si de alte cosmaruri care altfel ar urma daca implementezi clasa Command_cea_buna_la_de_toate. ;)
Suna bine dar cum legi instante ale claselor descrise in meniu? Pui in user data (parca se poate atasa asa ceva la elementele de UI)?



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: conversie implicita de la int la enum

Post by Ovidiu Cucu » 12 Mar 2008, 17:28

Dragos Cojocari wrote:
Ovidiu Cucu wrote:Acuma, gadiland putin la OO-ul de care se face atata caz in ziua de azi, toata lumea il cunoaste (pe de rost), dar foarte putini il aplica (in practica) asa cum trebuie:

N-ar fi oare mai eleganta o clasa (abstracta) Command din care deriva Connect, Disconnect, Reset, s.a.m.d?
Eu cred ca da. In plus scapi si de acel enum "enervant" si de alte cosmaruri care altfel ar urma daca implementezi clasa Command_cea_buna_la_de_toate. ;)
Suna bine dar cum legi instante ale claselor descrise in meniu? Pui in user data (parca se poate atasa asa ceva la elementele de UI)?
Scuze, dar la ora asta sunt cam obosit si nu inteleg...
Poti, te rog, sa detaliezi putin care-i problema?

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: conversie implicita de la int la enum

Post by Dragos Cojocari » 12 Mar 2008, 17:30

Mai simplu: cum ai folosi clasele pe care le-ai mentionat? Cum faci legatura intre o intrare intr-un meniu si hai sa zicem o instanta a clasei Connect.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: conversie implicita de la int la enum

Post by Ovidiu Cucu » 12 Mar 2008, 17:37

Dragos Cojocari wrote:Mai simplu: cum ai folosi clasele pe care le-ai mentionat? Cum faci legatura intre o intrare intr-un meniu si hai sa zicem o instanta a clasei Connect.
Ok. Ma gandesc si-ti raspund dupa ce ajung acasa (in celalalt capat al Iasului). Acuma trebe sa "inchid pravalia". :biggrin:

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: conversie implicita de la int la enum

Post by Silviu Ardelean » 12 Mar 2008, 18:12

Ovidiu Cucu wrote:Acuma, gadiland putin la OO-ul de care se face atata caz in ziua de azi, toata lumea il cunoaste (pe de rost), dar foarte putini il aplica (in practica) asa cum trebuie:

N-ar fi oare mai eleganta o clasa (abstracta) Command din care deriva Connect, Disconnect, Reset, s.a.m.d?
Eu cred ca da. In plus scapi si de acel enum "enervant" si de alte cosmaruri care altfel ar urma daca implementezi clasa Command_cea_buna_la_de_toate. ;)
Ovidiu, eu nu agreez o astfel de abordare pentru acesta problema. Chiar nu are sens sa facem enshpe clase = nr de ID-uri din meniu numai ca sa ne dam mari cat de tari suntem in OOP.
In acest caz, sunt adeptul ideii, "keep it simple". Eu, prefer varianta propusa de tine cu acel switch.
E mult mai simpla si la obiect, pardon subiect. :thumbsup:
Last edited by Silviu Ardelean on 12 Mar 2008, 18:33, edited 1 time in total.

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: conversie implicita de la int la enum

Post by Marius Bancila » 12 Mar 2008, 18:17

Dragos Cojocari wrote:Mai simplu: cum ai folosi clasele pe care le-ai mentionat? Cum faci legatura intre o intrare intr-un meniu si hai sa zicem o instanta a clasei Connect.
Probabil cu un factory care instantieaza una dintre clase in functie de ID. Adica tot la un switch ajungem.

Probabil ca lui dumion i-ar place sa poata crea un operator care sa faca conversia, dar din pacate pentru enum-uri nu merge. :(
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: conversie implicita de la int la enum

Post by Silviu Ardelean » 12 Mar 2008, 18:23

In plus, daca ne gandim ca:

Code: Select all

Command* cmd = new Command(id - ID_COMMANDS_CONNECT);

foloseste niste ID-uri prezente intr-un fiser extern (ex. resource.h) aceasta asociere intre ID-uri de resursa si enum-uri nu poate fi 100% safe. Deci, folosirea enum-ului nu cred ca e ceea mai buna idee pentru ce doreste sa faca dumion.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: conversie implicita de la int la enum

Post by Ovidiu Cucu » 12 Mar 2008, 19:35

Am ajuns acasa! :D

Ca sa-i raspund lui Dragos la fel de scurt, "clar" si concis ca si intrebarea:

"Dupa o analiza mai atenta a problemei prezentate de colegul nostru Dumion, consider ca nu este necesara crearea unei clase (sau a mai multor clase) pentru a mapa un range de comenzi (mesaje WM_COMMAND). Bineinteles, daca unul dintre voi vrea sa demonstreze ca asa ceva este necesar si justificat, il rog sa ia cuvantul..." :biggrin:

NOTA: Raspunsul meu anterior a fost doar un "patch oop-ist" la o abordare si mai proasta (aia cu enum-ul).
Nu fac asa ceva in the real programming life. ;)

User avatar
dumion
Membru
Membru
Posts: 74
Joined: 25 Jul 2007, 10:17

Re: conversie implicita de la int la enum

Post by dumion » 12 Mar 2008, 20:57

Marius Bancila wrote:Probabil ca lui dumion i-ar place sa poata crea un operator care sa faca conversia, dar din pacate pentru enum-uri nu merge. :(
M-am gandit la asta, dar nu stiam cum se poate face. Pacat ca nu se poate. Oricum, mi-am lamurit neclaritatile. Mersi la toata lumea. :thumbup:

Post Reply