template vs #define

template vs #define - C++ - Programmation

Marsh Posté le 16-05-2009 à 17:43:09    

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
Reply

Marsh Posté le 16-05-2009 à 17:43:09   

Reply

Marsh Posté le 16-05-2009 à 18:04:36    

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
Reply

Marsh Posté le 16-05-2009 à 18:08:49    

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

Reply

Marsh Posté le 16-05-2009 à 18:11:32    

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.

Reply

Marsh Posté le 16-05-2009 à 18:14:20    

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...)

Reply

Marsh Posté le 16-05-2009 à 18:42:16    

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.

Reply

Marsh Posté le 16-05-2009 à 19:08:18    

j'acquiesce

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed