Probleme spécialisation de template - C++ - Programmation
Marsh Posté le 14-05-2004 à 19:32:49
Oualb a écrit : j'ai un probleme de spécialisation de template
|
juste pour dire que je suis d'accord avec ton résultat théorique et VS .NET 2002 aussi
Marsh Posté le 14-05-2004 à 19:33:48
chez moi ça marche
renplace tes strstream par des stringstream (<sstream> )
utilise les constructeurs, plutot que l'initialisation par copie (string s = "plop" -> string s("plop" ))
Marsh Posté le 14-05-2004 à 19:39:12
Taz a écrit : chez moi ça marche |
c'est pas pour pinailler (enfin si un peu quand même...), mais string s = "plop" est strictement équivalent à string s("plop" ) non ?
c'est pas comme si on faisait string s;s= = "plop"; ...
Marsh Posté le 14-05-2004 à 19:41:01
je viens d'essayer avec un vieux gcc et ca marche !!
avec CC il accepte la specialisation seulement quand il trouve lui même le type du template, c'est à dire si je mettais fromString(s) au lieu de fromString<string>(s)
mais le probleme c'est que je peux pas faire ca vu que le type template n'apparait que dans le retour de la fonction
ou alors je mets void fromString<T>(const string & source, T & cible) mais ca me plait moins
avec stringstream c'est pareil
Marsh Posté le 14-05-2004 à 19:46:14
non parce que comme je l'ai dit, = est une initialization par copie. ton compilateur est libre d'implémenter une optimisation, mais ce n'est nullement requis (certain le fond pas d'ailleurs)
alors autant ne pas l'oublier et utiliser la syntaxe du constructeur
g++ fait cette optimisation, et également si tu écris
Foo f = Foo(3);
la seul instruction généré sera Foo(int) et rien d'autres, optimisation oblige
Marsh Posté le 14-05-2004 à 19:47:19
bah moi je préfère, puisque la déduction de type est possible
tu n'a plus qu'à écrire
fromString("3", i);
fromString("plop", str);
Marsh Posté le 14-05-2004 à 19:51:16
ok tu trouves que c'est mieux comme ca ?
bon je vais faire ca alors
mais sinon c'est quand meme bien un bug du compilo cette histoire ?
Marsh Posté le 14-05-2004 à 19:53:50
pas un bug, juste un truc pas implémenter
c'est pas que je trouve ça mieux, c'est que c'est un sucre syntaxique : pas la peine de spécifier le type paramètre, le compilateur pourra dans l'immense majorité des cas le deviner, alors qu'avec ton autre solution ou seul le retour varie, il faut expliciter tout ça ... ce qui peut devenir lourd et source d'erreur
Marsh Posté le 14-05-2004 à 19:58:30
ouais ok un truc pas implémenté ...
mais ca fait chier !
en fait ce qui me fait peur c que cette appli devra etre porté vers Linux, Windows et HPUX
j'espere que les compilos n'auront pas oublié d'implémenter certaines features sinon je suis mal !
y'a toute une hiérarchie de classes templates avec des heritages en diamant, certains virtuels d'autre non, je crois les doigts !!!
Marsh Posté le 14-05-2004 à 19:26:12
j'ai un probleme de spécialisation de template
le code suivant devrait produire la sortie suivante :
generique
34532
specialisé
hello world
et moi il me sort generique qu lieu de specialisé
autrement dit il ne comprend pas que j'ai spécialisé le template pour string.
est ce que ce code est correct ou pas ?
j'ai fait mon test avec le Sun CC 5.3