[C/C++] inline ds les templates

inline ds les templates [C/C++] - C++ - Programmation

Marsh Posté le 24-02-2003 à 18:40:37    


voila je voulai vous posez une question la dessus (chui un noob en C++ alors po de violence plz  :D )
 
quest ce qu'aporte le inline dans un cas de definition de template  
 
je mexplique quelle est la difference entre :

Code :
  1. template <class T> class test


et

Code :
  1. template <class T> inline class test


 
parceque les boucquin ecrive sans le inline et la rpof avec  :??:

Reply

Marsh Posté le 24-02-2003 à 18:40:37   

Reply

Marsh Posté le 24-02-2003 à 18:43:54    

ben ton prof est une vieille merde. une classe inline ça n'a d'ailleurs pas de sens. juste les fonctions. ca veut dire que l'on souhaite (pas qu'on ordonne) que le compilateur insère le code de la fonction plutot qu'il génère une instruction de saut. on fait généralement ça pour les petites fonctions ou le cout du saut est plus important que le traitement (genre une fonction membre get).
 
edit: et cela n'a rien de spécifique aux templates


Message édité par Taz le 24-02-2003 à 18:44:32
Reply

Marsh Posté le 24-02-2003 à 18:45:12    

merci tu me conforte dans mon idee  :)  
 
de toute facon tt son cour c comme ca truffe de truc qui serve a rien  :(

Reply

Marsh Posté le 24-02-2003 à 18:48:46    

c'est pas que ca ne sert à rien, c'est que c'est invalide. d'ailleurs, ton compilateur te jètera allègrement.

Reply

Marsh Posté le 24-02-2003 à 18:55:34    

ben mon compilo il accepte sans broncher (visual)  :??:   :(  
 

Code :
  1. #include<stdio.h>
  2. #include<conio.h>
  3. template <class T>
  4. inline T max (T a, T b)  { return (a > b ? a : b) ; }
  5. void main()
  6. {
  7.   int a = 4, b = -7 ;
  8.   double c = 3.1415 ;
  9.   char d = 'A' ;
  10.   printf ("%d, ", max (a, b));
  11.   printf ("%d, ", max (-34, b));
  12.   printf ("%c, ", max (d, 'X'));
  13.   printf ("%f ", max (c, double(a)));
  14. }


 
en voila un exemple qui marche bien


Message édité par neogally le 24-02-2003 à 18:56:41
Reply

Marsh Posté le 24-02-2003 à 19:01:15    

ben là c'est une fonction. au fait, pas la peine de réinventer la poudre. et préferes les iostream aux printf
 

Code :
  1. #include <iostream>
  2. using namespace std;


   

Code :
  1. template <class Type>
  2. inline Type max (Type a, Type b)  { return (a > b ? a : b) ; }


 
ok, cela fonctionne bien et c'est l'implémentation standard
 
mais ca serait "mieux" dans certains cas

Code :
  1. template <class Type>
  2. inline const Type& max (const Type &a, const Type &b)  { return (a > b ? a : b) ; }


pour eviter des recopies inutiles. mais l'attribut const ne permet plus de faire max(a, b)=truc;. et si on fait suater les const, on ne peut plus utilsier cette fonction sur les objets const. (tout ç a titre démonstratif)
 
   

Code :
  1. void main()


 
le type de retour de main doit etre int
 

Code :
  1. cout << max(a, b);


 
etc
 
 
NB: il existe déjà std::max et std::min dans la bibliotheque standard


Message édité par Taz le 24-02-2003 à 19:05:13
Reply

Marsh Posté le 24-02-2003 à 19:05:26    

ct pour te montrer a quel point son code est special  :D  
 
 
merci pour tes explication  ;)  cela a ete tres enrichisant

Reply

Sujets relatifs:

Leave a Replay

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