Parametre template sous forme de chaine de caracteres

Parametre template sous forme de chaine de caracteres - C++ - Programmation

Marsh Posté le 13-02-2004 à 19:04:52    

Salut
j'ai une classe template  

Code :
  1. template<class T>
  2. class MaClasse
  3. {
  4. public:
  5.   void printType() { cout << UN_TRUC << endl; }
  6. };


 
que faut il mettre a la place de UN_TRUC pour que si je fais

Code :
  1. MaClasse<double> a;
  2. a.printType();


ca m'écrive "double".
 
Il me semble avoir vu ca quelque part et que ca doit être possible. Est ce que quelqu'un sait ca ?
 
Merci d'avance

Reply

Marsh Posté le 13-02-2004 à 19:04:52   

Reply

Marsh Posté le 13-02-2004 à 19:07:17    

je m'avance beaucoup.  
 
cout << typeof(a) ;


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 13-02-2004 à 19:10:28    

JagStang a écrit :

je m'avance beaucoup.  
 
cout << typeof(a) ;

et tu perds et de beaucoup
 
 
#include <typeinfo>
 
typeid(truc).name()
 
attention la représentation est spécifique à ton système, le mieux, c'est au lancement de ton programme tu crées un map type_info -> string et après, ça va tout seul :D

Reply

Marsh Posté le 13-02-2004 à 19:13:57    

hmmmm ouais mais il me semble que le truc que j'avais vu n'utilisait pas rtti, en gros il mettait juste des "" autour du type quand il instanciait le template.

Reply

Marsh Posté le 13-02-2004 à 19:15:27    

merde c'est du C# ça... ben bravo


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 13-02-2004 à 19:19:17    

et en plus avec ta méthode taz, non seulement c peut etre platform dependant, mais en plus typeid marche avec des instances, pas des types. Il faudrait donc que je cree une instance bidon de mon type avant. C pas terrible quand meme ...

Reply

Marsh Posté le 13-02-2004 à 19:20:35    

Code :
  1. #include <typeinfo>
  2. #include <map>
  3. #include <string>
  4. typedef std::map<std::string, std::string> Dict;
  5. inline
  6. Dict
  7. init_names()
  8. {
  9.   Dict names;
  10. #define ADD_NAME(TYPE) do{ names[typeid(TYPE).name()] = #TYPE ;}while(0)
  11.   ADD_NAME(double);
  12.   ADD_NAME(int);
  13.   ADD_NAME(std::string);
  14.   ADD_NAME(Dict);
  15.   ADD_NAME(init_names);
  16. #undef ADD_NAME
  17.   return names;
  18. }
  19. #include <iostream>
  20. int main()
  21. {
  22.   const Dict names(init_names());
  23.   for(Dict::const_iterator i(names.begin()); i!=names.end(); ++i)
  24.     {
  25.       std::cout << "symbol \"" << i->first << "\"\t->\t\"" << i->second << "\"\n";
  26.     }
  27. }

Reply

Marsh Posté le 13-02-2004 à 19:21:26    

Oualb a écrit :

hmmmm ouais mais il me semble que le truc que j'avais vu n'utilisait pas rtti, en gros il mettait juste des "" autour du type quand il instanciait le template.

les rtti n'ont rien rt si on peut s'en passer

Reply

Marsh Posté le 13-02-2004 à 19:58:55    

## pour concaténer des tokens passés au preprocessor. Je sais pas si ça marche pour les templates.
 
http://developer.apple.com/documen [...] ation.html

Reply

Sujets relatifs:

Leave a Replay

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