STL vs. MFC in an MFC application

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

STL vs. MFC in an MFC application

Post by Silviu Ardelean » 10 Jul 2011, 13:46

Ovidiu Cucu wrote:
Silviu Ardelean wrote: Un exemplu de folosire corecta a lui SetItemData() il gasesti aici.
Ughhh! Sa fiu sef la MS si sa am un machinegun, l-as ciurui pe-ala care-a scris articolul. :)
// E un fel de "lasa-ma sa te las" in problema sortarii listview-urilor.
Sa-l iertam totusi, pentru ca articolul e scris pe vremea lui Pazvante (se specifica asta acolo: Retired KB Content Disclaimer). ;)
Ideea articolului e sortarea si nu stiu ce container fancy.
Din moment ce pentru entitatile reprezenate foloseste o banala matrice e cat se poate de evident ca vorbim de un exemplu si atat. Probabil, intentionat si pentru simplitate s-a ales aceasta aborare.
Ovidiu Cucu wrote:// A se citi cu atentie Este necesara utilizarea STL intr-o aplicatie MFC?
Daca tot ai deschis subiectul, as dorii sa fac si eu niste comentarii.
Si totusi niste librarii STL sunt portabile. Cele MFC NU. Aspectul asta conteaza enorm in foarte multe proiecte, mai ales in zilele noastre.
Clasele MFC sunt mai usor de folosit atunci cand se dezvolta variantele ANSI si UNICODE.
Te rog, detaliaza cu ce sunt mai usor de folosit. Pana la urma, diferenta o faci din niste macro-uri pe care le poti aplica si sa faci distinctia std::string vs. std::wstring.
Alte functii STL "puternice" sunt rar folosite intr-o aplicatie MFC.
Nu vad asta ca un argument si as venii cu cateva contra-exemple: for_each, find, count, search, copy, fill, merge si multe altele de aici: http://www.cplusplus.com/reference/algorithm/
Codul sursa MFC este usor de inteles pentru cineva familiarizat cu WinAPI. Codul sursa STL arata ca un fel de "gibberish" chiar si pentru avansati.
Intrebarea e cat de multi mai sunt familiarizati cu WinAPI. Numarul acestora e constant sau mai degraba in scadere (migreaza spre .NET, Java, QT, etc care au librarii net superioare celor din MFC).
In general, erorile de compilare datorate STL-ului sunt "kilometrice" deci greu de "tradus".
Cam toate erorile C/C++ sunt mai greu de "tradus" pentru incepatori.
Documentatia MFC-ului e mai usor de "rasfoit", ofera mai multe exemple si e mai usor de inteles decat cea pentru STL.
Cut tot respectul ptr. cei de la MSDN, da-mi voie sa te contrazic. Exista site-uri mai simple si clar documentate. ex. http://www.cplusplus.com/
De multe ori mi-a fost dat sa constat ca documentatia STL din MSDN lasa mult de dorit. Ma intreb daca nu intentionat e asa.




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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 10 Jul 2011, 15:23

Silviu Ardelean wrote:
Ovidiu Cucu wrote:
Silviu Ardelean wrote: Un exemplu de folosire corecta a lui SetItemData() il gasesti aici.
Ughhh! Sa fiu sef la MS si sa am un machinegun, l-as ciurui pe-ala care-a scris articolul. :)
// E un fel de "lasa-ma sa te las" in problema sortarii listview-urilor.
Sa-l iertam totusi, pentru ca articolul e scris pe vremea lui Pazvante (se specifica asta acolo: Retired KB Content Disclaimer). ;)
Ideea articolului e sortarea si nu stiu ce container fancy.
Din moment ce pentru entitatile reprezenate foloseste o banala matrice e cat se poate de evident ca vorbim de un exemplu si atat. Probabil, intentionat si pentru simplitate s-a ales aceasta aborare.
Ovidiu Cucu wrote:// A se citi cu atentie Este necesara utilizarea STL intr-o aplicatie MFC?
Daca tot ai deschis subiectul, as dorii sa fac si eu niste comentarii.
Si totusi niste librarii STL sunt portabile. Cele MFC NU. Aspectul asta conteaza enorm in foarte multe proiecte, mai ales in zilele noastre.
Clasele MFC sunt mai usor de folosit atunci cand se dezvolta variantele ANSI si UNICODE.
Te rog, detaliaza cu ce sunt mai usor de folosit. Pana la urma, diferenta o faci din niste macro-uri pe care le poti aplica si sa faci distinctia std::string vs. std::wstring.
Alte functii STL "puternice" sunt rar folosite intr-o aplicatie MFC.
Nu vad asta ca un argument si as venii cu cateva contra-exemple: for_each, find, count, search, copy, fill, merge si multe altele de aici: http://www.cplusplus.com/reference/algorithm/
Codul sursa MFC este usor de inteles pentru cineva familiarizat cu WinAPI. Codul sursa STL arata ca un fel de "gibberish" chiar si pentru avansati.
Intrebarea e cat de multi mai sunt familiarizati cu WinAPI. Numarul acestora e constant sau mai degraba in scadere (migreaza spre .NET, Java, QT, etc care au librarii net superioare celor din MFC).
In general, erorile de compilare datorate STL-ului sunt "kilometrice" deci greu de "tradus".
Cam toate erorile C/C++ sunt mai greu de "tradus" pentru incepatori.
Documentatia MFC-ului e mai usor de "rasfoit", ofera mai multe exemple si e mai usor de inteles decat cea pentru STL.
Cut tot respectul ptr. cei de la MSDN, da-mi voie sa te contrazic. Exista site-uri mai simple si clar documentate. ex. http://www.cplusplus.com/
De multe ori mi-a fost dat sa constat ca documentatia STL din MSDN lasa mult de dorit. Ma intreb daca nu intentionat e asa.
Silviu, pana sa-ti rapund punct cu punct, te rog sa retii urmatoarele:
Acel articol numit Este necesara utilizarea STL intr-o aplicatie MFC? vrea sa raspunda la intrebarea "Este necesara utilizarea STL intr-o aplicatie MFC?" si nu la "Este STL mai tare decat MFC?"
Te rog, nu mai citi printre randuri si nu mai sari peste "aplicatie MFC"!

BTW:
Let's take a look in your signature: "Simple is better than complex. Clear is better than cute" ;)

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

Re: STL vs. MFC in an MFC application

Post by Silviu Ardelean » 10 Jul 2011, 19:10

Ovidiu, din moment ce ai deschis un alt thread cu comment-ul meu ma astept la o discutie pe tema MFC versus STL si nu numai. Chiar m-as bucura sa aflu de ce crezi ca MFC-ul e mai ready decat STL pentru unicode/ansi. Pe Windows in ambele situatii ajungi sa te joci cu WideCharToMultiByte() si MultiByteToWideChar().

FAQ-ul tau mi se putin partinitor in favoarea MFC-ului si pentru ca ai facut referire la el aici mi-am exprimat parerea.
La cati din algoritmi STL le gasesti echivalentul in MFC? Cand ai nevoie unul perzent in STL (ex. equal_range() sau merge()) nu mai bine ii folosesti, decat sa te apuci tu sa reinventezi roata?

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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 10 Jul 2011, 20:24

Silviu Ardelean wrote:Ovidiu, din moment ce ai deschis un alt thread cu comment-ul meu ma astept la o discutie pe tema MFC versus STL [...]
.
Nu.
Ma astept la o discutie, asa cum spune titlul, despre STL vs. MFC in an MFC application.
Silviu Ardelean wrote:FAQ-ul tau mi se putin partinitor in favoarea MFC-ului [...]
Acel FAQ este "partinitor" pentru ca titlul incepe cu [MFC].
Din nou, titlul complet este: "[MFC] Este necesara utilizarea STL intr-o aplicatie MFC?".

Daca esti asa de tare pe STL, scrie tu ceva nice cu titlul: "[STL] Este necesara utilzarea MFC intr-o apliatie STL?"
Cu argumente si liniute de la capat. Hai sa te vad! :)

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

Re: STL vs. MFC in an MFC application

Post by Silviu Ardelean » 10 Jul 2011, 23:29

Ovidiu Cucu wrote:Daca esti asa de tare pe STL, scrie tu ceva nice cu titlul: "[STL] Este necesara utilzarea MFC intr-o apliatie STL?"
Cu argumente si liniute de la capat. Hai sa te vad! :)
Chuck Norris nu sunt si vreo relatie de rudenie cu el nu am. Doar el poate face lucruri magice de genul: Chuck Norris can write at 0x00000004. :)

Daca se doreste sa se poarte o discutie interesanta ar trebuii sa scoatem din ecuatie cuvintele subliniate si sa vorbim pro/contra celor doua librarii in contextul aplicatiilor Windows. Pe ideea subliniata cred ca tu ai spus destule si mare lucru nu ar mai fi de spus. Eu am mai adaugat de ce prefer pentru containere si algoritmi din STL.
Cred ca poate avea loc o discutie interesanta ce ar implica si alti colegi de forum pe urmatoarea idee: de ce am alege anumite clase de framework in detrimentul claselor similare din celalalt framework.

User avatar
cristianamarie
Membru++
Membru++
Posts: 480
Joined: 12 Mar 2009, 18:47
Judet: Iaşi
Location: Iasi

Re: STL vs. MFC in an MFC application

Post by cristianamarie » 11 Jul 2011, 07:01

Citeodata e necesara folosirea STL, sigur. Mai ales daca e vorba de algoritmica, MFC neavind in scop asta prea mult. Dezavantajele sint aceleasi ca mix-ul la doua librarii diferite, multithreading-ul, data passing dintre obiectele MFC si cele STL, poate bug-uri de conversie subtile, itemi fara corespondent/suport (STL nu stie ce e un BSTR sau un VARIANT, de exemplu) care trebuie manajati de MFC si sortati de STL... ca de obicei. Scrii copy constructorul in MFC si il iterezi cu STL. MFC depinde de /DUNICODE, STL nu - deci mai trebuie plumbing code si aici.

Morala mea ar fi asta: daca avem ceva colectii in care ne putem scoate cu colectiile native, folosim cu incredere cele din libraria main. Scriind o aplicatie MFC si citind citeva zeci de key=value dintr-o fila, eu ramin la CMap. Atita timp cit n-am nevoie de algoritmi care penalizeaza prea tare, ma bazez pe Lookup si GetNextAssoc ca isi fac treaba destul de bine ca si find si iterator++.

Concluzia mea - folosirea STL intr-o aplicatie MFC e necesara este atita timp cit 1. avem un cistig vizibil din folosirea STL si 2. avem grija de toate detaliile de interactiune dintre MFC si STL.
Daca citim dintr-un INI file, raminem cu MFC.
Nuclear launch detected

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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 11 Jul 2011, 07:17

Silviu Ardelean wrote:[...] sa scoatem din ecuatie cuvintele subliniate [...]
Ba chiar insist pe cuvintele subliniate mai sus.
Nu e prima discutie de genul asta la care particip si stiu ca mai toate degenereaza in "hai sa aratam noi ce cool e STL-ul".
Deci, vorbim de utilizarea STL intr-o aplicatie MFC.
Ca sa fie mai clar, hai sa-i zicem "necesitatea de a utiliza STL atunci cand scriem extensii MFC". Subliniez din nou. :)
De exemplu, sa pornim de la ce-a pornit discutia.
Eu scriu o extensie MFC pornind de la CListView careia ii adaug ceva customizari printre care si sortarea. Nu folosesc STL nici de samanta.
Acuma, sa vina Gigel sa spuna: "mah ghiuj batran, uite ca am facut si eu asa ceva cu STL si e mai bun pentru ca... si pentru ca...".
Deci, la concret, please!

Despre "minunatele proprietati ale algoritmilor" si despre STL in general, putem deschide un topic nou.

[ later edit ]
Se ajunge ca un Gigel care lucreraza la o aplicatie de gestiunea stocurilor cu MFC sa bage repde un <algorithm> ca sa-l impresioneze pe sefu. De aici si pana la a folosi CoTaskMemAlloc ca sa afiseze ceva cu AfxMessageBox nu-i decat un pas. Cu asta chiar ca-l da pe spate. :D
// cazuri reale... ;)

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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 11 Jul 2011, 09:23

cristianamarie wrote: [...]
Concluzia mea - folosirea STL intr-o aplicatie MFC e necesara este atita timp cit 1. avem un cistig vizibil din folosirea STL si 2. avem grija de toate detaliile de interactiune dintre MFC si STL.
Correct! Uitasem de #2 dar o sa-l adaug la lista.
Apropo de interactiuni. Am lucrat scurt timp la o aplicatie care, ca sa afiseze un text din baza de date, facea (simplificat) cam asa:
database -> core -> BL (*) -> BLUII (**) -> UI.
Fiecare layer cu formatul lui pentru string-uri, cozile lui de mesaje, threadurle lui, conversiile si clonele de rigoare.
Pai si fara bug-uri, un omulet cu un smartfon bengos cu asemenea soft, ar avea sanse sa citeasca/auda stand in cap la un boschetar un mesaj gen "Atentie, gaura de canal!". :D

------
(*) BL- Business Logic, of course cu STL la greu.
(**) BLUII - Business Logic - User Interface Interface, :biggrin: deh, fara asa ceva n-ar fi fost fun pentru developeri, iar niste achitects ar fi ramas fara paine. :)

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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 15 Jul 2011, 16:35

Am promis ca rapund punct cu punct.
Silviu Ardelean wrote:
Ovidiu Cucu wrote:In general, erorile de compilare datorate STL-ului sunt "kilometrice" deci greu de "tradus".
Cam toate erorile C/C++ sunt mai greu de "tradus" pentru incepatori.
Da? O fi...

Sa zicem ca unui "incepator", compilatorul ii scuipa ceva de genul:
Compiling...
Console.cpp
C:\P\ VS60\VC98\INCLUDE\list(125) : warning C4786: '?$reverse_bidirectional_iterator@Viterator@?$list@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@V
?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@AAV43@PAV43@H' : identifier was truncated to '255' characters in the browser information
C:\Projects\Console_v6\Console_v6.cpp(10) : see reference to class template instantiation 'std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,st
ruct std::char_traits<char>,class std::allocator<char> > > >' being compiled

... am scurtat-o ca sa incapa pe forum; in total sunt 12 warning-uri si 23 erori, pe acelasi calapod...

C:\P\ VS60\VC98\INCLUDE\algorithm(546) : error C2676: binary '+' : 'class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<cha
r>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
C:\P\ VS60\VC98\INCLUDE\algorithm(539) : see reference to function template instantiation 'void __cdecl std::_Sort_0(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_stri
ng<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)' being compiled
C:\P\ VS60\VC98\INCLUDE\algorithm(546) : error C2780: 'void __cdecl std::_Insertion_sort(_RI,_RI,_Pr)' : expects 3 arguments - 2 provided
C:\P\ VS60\VC98\INCLUDE\algorithm(619) : see declaration of '_Insertion_sort'
C:\P\ VS60\VC98\INCLUDE\algorithm(539) : see reference to function template instantiation 'void __cdecl std::_Sort_0(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_stri
ng<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)' being compiled
C:\P\ VS60\VC98\INCLUDE\algorithm(547) : error C2676: binary '+=' : 'class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<ch
ar>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
C:\P\ VS60\VC98\INCLUDE\algorithm(539) : see reference to function template instantiation 'void __cdecl std::_Sort_0(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_stri
ng<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)' being compiled
Creating browse info file...

Console.exe - 23 error(s), 12 warning(s)
Clar ca-l apuca plansul si cheama un "avansat".
Avansatul, dupa ce incearca marea cu degetu (pardon, cu F1), da la dublu-clice pe erori si ajunge-aici:

Code: Select all

template<class _RI> inline
   void sort(_RI _F, _RI _L)
   {_Sort_0(_F, _L, _Val_type(_F)); }
template<class _RI, class _Ty> inline
   void _Sort_0(_RI _F, _RI _L, _Ty *)
   {if (_L - _F <= _SORT_MAX)
      _Insertion_sort(_F, _L);
   else
      {_Sort(_F, _L, (_Ty *)0);
      _Insertion_sort(_F, _F + _SORT_MAX);
      for (_F += _SORT_MAX; _F != _L; ++_F)
         _Unguarded_insert(_F, _Ty(*_F)); }}
template<class _RI, class _Ty> inline
   void _Sort(_RI _F, _RI _L, _Ty *)
   {for (; _SORT_MAX < _L - _F; )
      {_RI _M = _Unguarded_partition(_F, _L, _Median(_Ty(*_F),
         _Ty(*(_F + (_L - _F) / 2)), _Ty(*(_L - 1))));
      if (_L - _M <= _M - _F)
         _Sort(_M, _L, _Val_type(_F)), _L = _M;
      else
         _Sort(_F, _M, _Val_type(_F)), _F = _M; }}
template<class _RI, class _Ty> inline
   _RI _Unguarded_partition(_RI _F, _RI _L, _Ty _Piv)
   {for (; ; ++_F)
      {for (; *_F < _Piv; ++_F)
         ;
      for (; _Piv < *--_L; )
         ;
      if (_L <= _F)
         return (_F);
      iter_swap(_F, _L); }}
template<class _RI> inline
   void _Insertion_sort(_RI _F, _RI _L)
   {_Insertion_sort_1(_F, _L, _Val_type(_F)); }
template<class _BI, class _Ty> inline
   void _Insertion_sort_1(_BI _F, _BI _L, _Ty *)
   {if (_F != _L)
      for (_BI _M = _F; ++_M != _L; )
         {_Ty _V = *_M;
         if (!(_V < *_F))
            _Unguarded_insert(_M, _V);
         else
            {copy_backward(_F, _M, _M + 1);
            *_F = _V; }}}
"Vezi mah? aici ii buba! Nu-i clar?"
(probabil avansatul stie chineza iar asta-i floare la ureche). :biggrin:

In fine...
De unde crezi c-ar fi putut sa apara toate 12 + 23? De la 35 de stupizenii?
NU. In exemplu de mai sus, doar de la una singura:

Code: Select all

   std::sort(list.begin(), list.end());
E doar un exemplu pe care l-am gasit pe net.
In lumea reala poti da de N stupizenii (unele mai subtile decat asta), fiecare scuipand M warning-uri si P erori.
Clar, daca nu-i neaparata nevoie (cazul in dicutie, daca scriem extensii MFC), nu-i bine sa ne legam la cap.

[ vor urma si celelalte puncte ]

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

Re: STL vs. MFC in an MFC application

Post by Silviu Ardelean » 16 Jul 2011, 22:02

Ovidiu Cucu wrote: "Vezi mah? aici ii buba! Nu-i clar?"
(probabil avansatul stie chineza iar asta-i floare la ureche). :biggrin:
Sa privim si altfel lucrurile: la STL ajungi la surse. Prin MFC, de cele mai multe ori ajungi doar la un header si PA.
Apropo de chineaza aia... nenea Stephan T Lavavej prin filmuletele de Advanced STL de le Channel 9 chiar spune de ce s-au ales ales notatiile alea. Mai departe treaba de "avansat". :)

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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 16 Jul 2011, 23:54

Silviu Ardelean wrote: Sa privim si altfel lucrurile: la STL ajungi la surse. Prin MFC, de cele mai multe ori ajungi doar la un header si PA.
Da, daca stii numai F12 (go to definition) si n-ai auzit de F11 (step into).
MFC-ul vine cu toate sursele: h, cpp, inl si ce-o mai fi. ;)

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

Re: STL vs. MFC in an MFC application

Post by Silviu Ardelean » 17 Jul 2011, 00:11

Ovidiu Cucu wrote:
Silviu Ardelean wrote: Sa privim si altfel lucrurile: la STL ajungi la surse. Prin MFC, de cele mai multe ori ajungi doar la un header si PA.
Da, daca stii numai F12 (go to definition) si n-ai auzit de F11 (step into).
MFC-ul vine cu toate sursele: h, cpp, inl si ce-o mai fi. ;)
Nu tine poanta cu F11 cat timp tu ai erori de compilare. Iar mai sus despre astfel de eroari vorbesti.
Anyway, propun sa trecem la punctele urmatoare. :)

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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 17 Jul 2011, 00:27

Silviu Ardelean wrote:
Ovidiu Cucu wrote:
Silviu Ardelean wrote: Sa privim si altfel lucrurile: la STL ajungi la surse. Prin MFC, de cele mai multe ori ajungi doar la un header si PA.
Da, daca stii numai F12 (go to definition) si n-ai auzit de F11 (step into).
MFC-ul vine cu toate sursele: h, cpp, inl si ce-o mai fi. ;)
Nu tine poanta cu F11 cat timp tu ai erori de compilare. Iar mai sus despre astfel de eroari vorbesti.
Da, vorbeam de erorile de compilare si anume ca daca cand folosesti STL compilerul te cam baga-n ceatza.
Si reamintesc, vorbim de amestecat STL cu MFC si nu de "amestecat" STL cu STL.
Anyway, propun sa trecem la punctele urmatoare. :)
Maine, acu la culcare! :)

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

Re: STL vs. MFC in an MFC application

Post by Ovidiu Cucu » 17 Jul 2011, 10:11

[ punct cu punct, cu extrase din "Chuck Norris Facts" ]
----------------------------------------------------------
  • Ovidiu Cucu wrote:// A se citi cu atentie Este necesara utilizarea STL intr-o aplicatie MFC?
    Si totusi niste librarii STL sunt portabile. Cele MFC NU. Aspectul asta conteaza enorm in foarte multe proiecte, mai ales in zilele noastre.
    Chuck Norris scrie extensii MFC portabile.
    Tocmai a anuntat pe blogul lui ca...

    Code: Select all

    CWnd* pWnd = CWnd::FindWindow(chuck.c_str(), norris.c_str());
    ...e portabil, pe cand...

    Code: Select all

    CWnd* pWnd = CWnd::FindWindow(strChuck, strNorris);
    ...NU este.
    ----------------------------------------------------------
  • Ovidiu Cucu wrote:Clasele MFC sunt mai usor de folosit atunci cand se dezvolta variantele ANSI si UNICODE.
    Pana la urma, diferenta o faci din niste macro-uri pe care le poti aplica si sa faci distinctia std::string vs. std::wstring.
    Chuck Norris nu se teme de UNICODE
    Vorbeste fluent mai multe limbi printre care Texana, Iowana si LA South-Centraleza.
    In plus stapaneste la perfectie macro-urile, asa ca n-a fost nici o problema pentru el sa defineasca chuck_norris_string.

    Code: Select all

    // File:     chuck_norris_std.h
    // Module:   Chuck Norris STL-MFC-Extension Library
    // Author:   Chuck Norris, of course!   
    // Revision: 16245+
    
    #ifdef UNICODE
    #define chuck_norris_string wstring
    #else
    #define chuck_norris_string string
    #endif 
    
    Printre sughituri datorate miilor de multumiri, maxime si cugetari adresate de fanii sai, a lansat un concurs cu propuneri pentru versiunea urmatoare.
    Nota importanta: Chuck Norris nu greseste, tot ce scrie e perfect dar poate si mai mult ca perfectul.
    ----------------------------------------------------------
  • Ovidiu Cucu wrote:Alte functii STL "puternice" sunt rar folosite intr-o aplicatie MFC.
    cateva contra-exemple: for_each, find, count, search, copy, fill, merge si multe altele de aici: http://www.cplusplus.com/reference/algorithm/
    Chuck Norris schimba rapid Z-order cu std::sort
    De asemenea, el foloseste std::for_each in loc de acel ::EnumWindows invechit, lent, bagos si super-periculos.
    ----------------------------------------------------------
  • Ovidiu Cucu wrote:Codul sursa MFC este usor de inteles pentru cineva familiarizat cu WinAPI. Codul sursa STL arata ca un fel de "gibberish" chiar si pentru avansati.
    Intrebarea e cat de multi mai sunt familiarizati cu WinAPI. Numarul acestora e constant sau mai degraba in scadere (migreaza spre .NET, Java, QT, etc care au librarii net superioare celor din MFC).
    Chuck Norris nu da doi centi pe WinAPI
    El foloseste MFC doar pentru MFC AppWizard apoi baga mare carcalete cu "librarii superioare": .NET, Java, QT, etc si nu-l doare capul, chiar daca nu ia Antinevralgic/Codamin/Antimigrin/Nurofen.
    ----------------------------------------------------------
  • Ovidiu Cucu wrote:In general, erorile de compilare datorate STL-ului sunt "kilometrice" deci greu de "tradus".
    Cam toate erorile C/C++ sunt mai greu de "tradus" pentru incepatori.
    Apropo de chineaza aia... nenea Stephan T Lavavej prin filmuletele de Advanced STL de le Channel 9 chiar spune de ce s-au ales ales notatiile alea. Mai departe treaba de "avansat". :)
    Chuck Norris a inventat codul write-only
    Conform Chuck Norris Extended OOP Bible, codul trebuie protejat la citire char si impotriva celor cativa eruditi din China Town.
    Atunci e perfect. Daca nici el nu-l mai poate citi atunci e mai mult ca perfect.
    ----------------------------------------------------------
  • Ovidiu Cucu wrote:Documentatia MFC-ului e mai usor de "rasfoit", ofera mai multe exemple si e mai usor de inteles decat cea pentru STL.
    STL din MSDN lasa mult de dorit. Ma intreb daca nu intentionat e asa.
    Chuck Norris crede in teoria conspiratiei, mai ales cand e vorba de MS(DN)
    No comments.
    ----------------------------------------------------------
:D
----------------------------------------------------------

Post Reply