Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3603 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  template vs #define

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

template vs #define

n°1885273
Glock 17Pr​o
Posté le 16-05-2009 à 17:43:09  profilanswer
 

hi,

 
Code :
  1. #define CONFIG_PROVIDER CfgFileIniProvider
  2. class App
  3. {
  4. CONFIG_PROVIDER  config;
  5. CONFIG_PROVIDER& getConfig()
  6. {
  7.  return config;
  8. }
  9. //getinstance()....
  10. };
  11. int main()
  12. {
  13. App & p = App::getInstance();
  14. CONFIG_PROVIDER & c = p.getConfig();
  15. }
 

vs

 
Code :
  1. template<typename U>
  2. class App
  3. {
  4. typedef U ConfigClassName;
  5. ConfigClassName  config;
  6. ConfigClassName& getConfig()
  7. {
  8.  return config;
  9. }
  10. static App<ConfigClassName  >& getInstance();
  11. };
  12. template<class U>
  13. App<U> & App<U>::getInstance()
  14. {
  15. return theApp;
  16. }
  17. int main()
  18. {
  19. App<CfgFileIniProvider> & p = App<CfgFileIniProvider>::getInstance();
  20. CfgFileIniProvider & c = p.getConfig();
  21. }
 


Au final je me rends compte que dans un cas comme celui ci on arrive au même résultat en utilisant un simple et bête #define,
sauf que le code à écrire est beaucoup plus "léger" !

 

QUel est l'intérêt d'avoir recours à l'arsenal des Template? C'est juste pour que des vérif soit faite àla compil ?! si oui, ça me parait bien léger...

 

PS:c'est peut être une question con...ya peut être un GROS truc que j'oublie,auquel cas je serais ravi de l'avoir en tête...

 

Merci.


Message édité par Glock 17Pro le 16-05-2009 à 17:56:12
mood
Publicité
Posté le 16-05-2009 à 17:43:09  profilanswer
 

n°1885276
Joel F
Real men use unique_ptr
Posté le 16-05-2009 à 18:04:36  profilanswer
 

Les tempaltes sont plus faciles à maitnenir, ne sont pas sujet au probleme de multiple definition des macros, respectent les namesapce et l'encapsulation.

 

Apres si t'aime ecrire du caca avec des macros, on va pas t'en empecher. Tu viendras juste couiner plus tard quand tu utiliseras une lib tierce qui va chier sur tes macros en silence.

 

Et dans ton exemple avec macros, tu fais comment pr avoir 2 instances de ta classe avec deux CONFIG different ?


Message édité par Joel F le 16-05-2009 à 18:05:04
n°1885277
Glock 17Pr​o
Posté le 16-05-2009 à 18:08:49  profilanswer
 

Effectivement ça fait beaucoup d'arguments... tu as évoqué les namespace, tu peux m'en dire (en deux mots) un peu plus à ce sujet, en quoi les templates respectent les namespace (et non les #define)? ty

n°1885279
Joel F
Real men use unique_ptr
Posté le 16-05-2009 à 18:11:32  profilanswer
 

une macro est défini au niveau des symboles textes et ne respectent pas l'encapsulation des types par les namespaces. en gros impossible de structurer les  macros par modules.

n°1885280
Glock 17Pr​o
Posté le 16-05-2009 à 18:14:20  profilanswer
 

hum je vois oui, d'ailleurs je me rends que je n'utilise jamais les namespace, et dans ma boite même constat, c'est une erreur ? Il est de bon usage de systématiquement créer ces classes dans un namespace ? (je dévie un peu du sujet principal mais ça m'intérèsse et tes réponses me conduisent à ces questions...)

n°1885286
Joel F
Real men use unique_ptr
Posté le 16-05-2009 à 18:42:16  profilanswer
 

c'est toujours bien d'avoir un truc modulaire qui évite les conflits de noms. Le jour ou ton code de math va entrer en conflti avec ton code de simu car les deux définissent un truc qui s'appelle matrix dans le namespace global ... vous serez frais.

n°1885290
Glock 17Pr​o
Posté le 16-05-2009 à 19:08:18  profilanswer
 

j'acquiesce


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  template vs #define

 

Sujets relatifs
Template, OpenMP et clause reductionfoncteur et template
template instanciation explicitetemplate de déclaration d'un copy-constructeur en friend (combo \o/)
SVP, Comment inserer une template flash sur dreamweaverXSLT template
templatetemplate et functor
template et version des compilateursManipulation d'un nom de template dans une #define-macro
Plus de sujets relatifs à : template vs #define


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)