Fonction qui retourne différent type de valeur.

Fonction qui retourne différent type de valeur. - C++ - Programmation

Marsh Posté le 19-02-2005 à 19:10:05    

Bonjour,
 
Dans un fichier texte j'ai ceci: "txt,15,truc1,truc2".
 
J'aimerais faire une fonction "lire" qui me fait ceci:
lire(0); ==> retourne txt
lire(1); ==> retourne 15
lire(2); ==> retourne truc1
lire(3); ==> retourne truc2
 
La seul problème c'est que parfois il devra retourner un 'int' ou un 'string'...alors qu'une fonction ne sais retourné qu'un seul type de valeur !
 
Merci d'avance...  
 

Reply

Marsh Posté le 19-02-2005 à 19:10:05   

Reply

Marsh Posté le 19-02-2005 à 20:20:40    

fait un tuc de ce style :
 

Code :
  1. template<typename T>
  2. struct Lecteur
  3. {
  4.     typedef T return_t;
  5.     void DoIt( /* tes paramétres*/ , return_t& retour )
  6.     {
  7.        // ce qui faut pour lire ton machin
  8.        retour = ...;
  9.     }
  10. };


 
specialise ensuite la structure Lecteur pour chaque type qu'il tefaut.
 

Code :
  1. template<> struct Lecteur<string> { ... };


Puis
 

Code :
  1. short monShort;
  2. Lecteur<short>::DoIt( .., monShort );
  3. std::string monString;
  4. Lecteur<std::string>::DoIt( .., monString );


 

Reply

Marsh Posté le 19-02-2005 à 20:37:20    

pourquoi une classe ?

Reply

Marsh Posté le 19-02-2005 à 22:20:02    

Taz a écrit :

pourquoi une classe ?


 
Si je me rappelles bien,on peut pas specialiser des fonctions template non ???

Reply

Marsh Posté le 19-02-2005 à 22:30:56    

un union suffit :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 19-02-2005 à 22:34:09    

bonjour le typage [:el g]

Reply

Marsh Posté le 19-02-2005 à 22:36:51    

KangOl a écrit :

un union suffit :o

[:ban]

Reply

Marsh Posté le 19-02-2005 à 22:38:12    

[:cupra]


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 19-02-2005 à 23:36:35    

Joel F a écrit :

Si je me rappelles bien,on peut pas specialiser des fonctions template non ???


t'as peut être pas besoin de template non plus

Reply

Marsh Posté le 19-02-2005 à 23:47:49    

de la bête surcharge aussi c'est vräy :p

Reply

Marsh Posté le 19-02-2005 à 23:47:49   

Reply

Marsh Posté le 19-02-2005 à 23:50:37    

Pas besoin de template, la surcharge de fonctions fait l'affaire.

Code :
  1. lire( std::istream &, /* OUT */ std::string & );
  2. lire( std::istream &, /* OUT */ int & );
  3. lire( std::istream &, /* OUT */ truc1 & );
  4. lire( std::istream &, /* OUT */ truc2 & );


 
edit: [:benou_grilled]


Message édité par HelloWorld le 20-02-2005 à 00:06:47

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 19-02-2005 à 23:57:46    

et ça serait bien si ça pouvait lancer des exceptions quand ça marche pas

Reply

Marsh Posté le 20-02-2005 à 09:54:56    

Sait-il à l'avance quel type il doit retourner ?
 
Joel F > pour suivre ton idée, ne peut on pas faire plus simple ?

Code :
  1. template< typename T >
  2. struct Lecteur
  3. {
  4.     static T Lire( /**param**/ )
  5.     {
  6.        /***/
  7.        return /*T*/;
  8.     }
  9. };

Reply

Marsh Posté le 20-02-2005 à 10:08:55    

Stroustrup-Junior a écrit :

Sait-il à l'avance quel type il doit retourner ?
 
Joel F > pour suivre ton idée, ne peut on pas faire plus simple ?

Code :
  1. template< typename T >
  2. struct Lecteur
  3. {
  4.     static T Lire( /**param**/ )
  5.     {
  6.        /***/
  7.        return /*T*/;
  8.     }
  9. };



 
 
Oui aussi ^^

Reply

Sujets relatifs:

Leave a Replay

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