[Impossible, contourné] Argument par défaut d'un template par défaut

Argument par défaut d'un template par défaut [Impossible, contourné] - C++ - Programmation

Marsh Posté le 22-08-2007 à 15:50:31    

Salut,
 
Je me demandais : est-il possible d'(ou plutôt : comment faire pour) attribuer à un template par défaut une valeur par défaut ? Genre (pour donner l'idée, mais bien sûr ça compile pas...) :

Code :
  1. template <class T=string>
  2. void print(T ligne="abc" )
  3. {
  4.      cout << ligne << endl;
  5.      return;
  6. }


 
Merci.


Message édité par SkippyleGrandGourou le 22-08-2007 à 16:30:29
Reply

Marsh Posté le 22-08-2007 à 15:50:31   

Reply

Marsh Posté le 22-08-2007 à 16:18:32    

pas avec des fonctions mais avec des classes oui :
Ca ca marche par contre :
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. void print(const string& ligne="abc" )
  5. {
  6.   cout << ligne << endl;
  7. }
  8. template<class T> void print(const T& ligne )
  9. {
  10.   cout << ligne << endl;
  11. }
  12. int main()
  13. {
  14.   print();
  15.   print(6.99);
  16.   return 0;
  17. }

Message cité 1 fois
Message édité par Joel F le 22-08-2007 à 16:18:56
Reply

Marsh Posté le 22-08-2007 à 16:29:00    

Joel F a écrit :

pas avec des fonctions mais avec des classes oui :

Oui, après recherche plus approfondie (le message d'erreur "default template arguments may not be used in function templates" m'avait échappé...) il semble que sur ce point encore le C++ soit mal foutu... :whistle:

 
Joel F a écrit :

Ca ca marche par contre :

Ou mieux à mon humble avis, puisque ça évite de dupliquer trop de code (le cout n'est pas mon seul but...) :

Code :
  1. template <class T>
  2. void print(T ligne)
  3. {
  4.      cout << ligne << endl;
  5.      return;
  6. }
  7. void print()
  8. {
  9.      print("abc" );
  10.      return;
  11. }
 

Message cité 1 fois
Message édité par SkippyleGrandGourou le 22-08-2007 à 16:29:20
Reply

Marsh Posté le 22-08-2007 à 16:54:15    

const T& s'il te plait v_v

Reply

Marsh Posté le 22-08-2007 à 17:50:10    

SkippyleGrandGourou a écrit :

Oui, après recherche plus approfondie (le message d'erreur "default template arguments may not be used in function templates" m'avait échappé...) il semble que sur ce point encore le C++ soit mal foutu... :whistle:


 
Il s'est amélioré dernièrement :)
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. template <class T = std::string>
  4. void print( T const& ligne = "abc" )
  5. {
  6.     std::cout << ligne << std::endl;
  7. }
  8. int main()
  9. {
  10.     print();
  11.     print( "toto" );
  12.     print( 3.14 );
  13. }


 
$g++ -dumpversion
4.3.0
 
$g++ -std=c++0x toto.cpp && ./a.out
abc
toto
3.14

Reply

Marsh Posté le 22-08-2007 à 17:56:51    

Ah oui, mais ça va pas être possible : g++ 4.0.3 non upgradable (FC4 + méga flemme d'installer g++ par les sources...), et code devant être au final compatible avec g++ 3.2.3...  :whistle:  
 
M'enfin, j'y aurai peut-être accès dans quelques années... ;)

Reply

Marsh Posté le 22-08-2007 à 18:32:43    

++fab a écrit :


Il s'est amélioré dernièrement :)


 
stable le 4.3 ?

Reply

Marsh Posté le 22-08-2007 à 21:38:10    

Joel F a écrit :


 
stable le 4.3 ?


 
Pas encore releasé :-)

Reply

Marsh Posté le 22-08-2007 à 21:54:33    

Joel F a écrit :


stable le 4.3 ?


il est en fin de 'stage 1', il entre en stage 2 mi septembre d'après Mark Mitchell.
comme il y a pas mal de changements profonds, et d'après certains commentaires, on peut s'attendre à voir un gcc à peu près du même accabit que 4.0, et il se pourrait que son successeur ait plus de succès -- comme 4.1.x envers 4.0.x, mais c'est de la pure spéculation. (Tout ça si la GPLv3 ne les obligent pas à releaser 4.3 prématurément, mais je n'ai pas eu le fin mot de l'histoire)

 

Stable ? Ce sont les distrib qui le décide.


Message édité par ++fab le 22-08-2007 à 23:40:05
Reply

Marsh Posté le 23-08-2007 à 09:58:56    

me semblait bien qu'il etait pas frais encore :) Merci pour les infos :D

Reply

Sujets relatifs:

Leave a Replay

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