fonction membres et template .template

fonction membres et template .template - C++ - Programmation

Marsh Posté le 05-09-2003 à 21:07:08    

  ce soir, juste un petit article pour vous montrer une utilisation des template qui en surprendrait plus d'un. c'est suite à un sujet de JoelF que je me suis dit que ça vous servirait: sachez que ça existe, et si un jour vous êtes perdus, que le compilo gueule des parse error alors que tout semble correct, pensez-y.
 
il s'agit de la notation  « .template » (et « ->template »). cette notation (la synthaxe tout de suite) doit être uniquement utilisée à l'intérieur de template et seulement s'ils utilisent quelque chose dépendant d'un paramètre template, ce pour éviter la confusion synthaxique entre l'argument template et l'opérateur de comparaison <
 
l'exemple tout de suite: voyez par vous même comment faire les différents appels.
 

Code :
  1. template<typename T>
  2. struct Foo
  3. {
  4.   template<typename U>
  5.   static void staticFunction()
  6.   {}
  7.   template<typename U>
  8.   void Function()
  9.   {}
  10. };
  11. struct Bar
  12. {
  13.   template<typename U>
  14.   static void staticFunction()
  15.   {}
  16.   template<typename U>
  17.   void Function()
  18.   {}
  19. };
  20. template<typename U>
  21. void fx(U u)
  22. {
  23.   u.template Function<void>();
  24.   (&u)->template Function<void>();
  25.   U::template staticFunction<void>();
  26. }
  27. int main()
  28. {
  29.   Foo<int>::staticFunction<bool>();
  30.   Bar::staticFunction<double>();
  31.   Foo<unsigned> f;
  32.   Bar b;
  33.   f.Function<void>();
  34.   (&f)->Function<void>();
  35.   b.Function<char>();
  36.   (&b)->Function<char>();
  37.   fx(f);
  38.   fx(b);
  39. }


Message édité par Taz le 05-09-2003 à 21:11:10
Reply

Marsh Posté le 05-09-2003 à 21:07:08   

Reply

Marsh Posté le 05-09-2003 à 21:15:42    

Qq peux m'expliquer pq les caractères '<' et '>' on été choisis pour les templates?  [:naughty]  
 
Ca aurai été mieux avec un autre couple de tokens, ce qui aurai évité ce genre d'horreurs:
 

Code :
  1. map<vector<int> >  foo;


Message édité par schnapsmann le 05-09-2003 à 21:20:28
Reply

Marsh Posté le 05-09-2003 à 21:21:29    

parce que l'ascii est très pauvre et qu'il a déjà fallu inventé les trigraphes pour certains pays européens. et puis j'ai beau cherché, je vois pas qu'el autre symbol on aurait pu utiliser. reste ` pas très lisible, @, $, je ne vois rien d'autre.

Reply

Marsh Posté le 05-09-2003 à 21:27:03    

Taz a écrit :

parce que l'ascii est très pauvre et qu'il a déjà fallu inventé les trigraphes pour certains pays européens. et puis j'ai beau cherché, je vois pas qu'el autre symbol on aurait pu utiliser. reste ` pas très lisible, @, $, je ne vois rien d'autre.


 
` '  :??:
 
et pq ne pas avoir repris "[]", ou "{}" qui n'auraient pas posé d'ambiguités syntaxiques inextricables (et pas d'ambiguité lexicale à 100%)


Message édité par schnapsmann le 05-09-2003 à 21:28:25
Reply

Marsh Posté le 05-09-2003 à 21:29:22    

même problème avec []
 
quand aux {}, ça altère trop la lisibilité de les réutiliser


Message édité par Taz le 05-09-2003 à 21:29:38
Reply

Marsh Posté le 05-09-2003 à 21:30:16    

Taz a écrit :

même problème avec []
 
quand aux {}, ça altère trop la lisibilité de les réutiliser


 
et quote/back quote?
 
le token }} n'existe pas en c++ nan?

Reply

Marsh Posté le 05-09-2003 à 21:31:21    

à côté on voit, mais séparé, ça devient plus dur, et puis selon la police ça apparait mal, et je te dis pas le nombre de boulets qui feraient des fautes de frappes.

Reply

Marsh Posté le 05-09-2003 à 21:32:41    

SchnapsMann a écrit :


le token }} n'existe pas en c++ nan?

si fermeture de 2 blocs

Reply

Marsh Posté le 05-09-2003 à 21:36:08    

Taz a écrit :

si fermeture de 2 blocs


 
c'est jamais un token au sens de l'analyseur lexical: "}}" donne deux tokens '}'.
Ce qui est différent de ">>" qui donne un seul token décalage de bits au lieu de deux tokens '>'.

Reply

Marsh Posté le 05-09-2003 à 21:39:03    

aujourd'hui même Gabriel Dos Reis me disait encore :

Citation :

comme les saintes écritures, la norme n'a pas besoin de raison valable
pour dicter. Il suffit qu'elle légifère. :-)


 
moi >> tout est donc une histoire de foi %oD
 

Citation :

sans la foi, tu es perdu mon fils.

Reply

Marsh Posté le 05-09-2003 à 21:39:03   

Reply

Marsh Posté le 05-09-2003 à 21:56:15    

** jojo a encore dit des conneries :p **


Message édité par Joel F le 05-09-2003 à 22:04:25
Reply

Marsh Posté le 05-09-2003 à 22:04:54    

:ange: double ce soir ...
 
comment tu fait toi pour specialiser une fonction template ?

Reply

Marsh Posté le 05-09-2003 à 22:06:06    

Joel F a écrit :

:ange: double ce soir ...
 
comment tu fait toi pour specialiser une fonction template ?

voir la réponse de GDR plus haut.

Reply

Sujets relatifs:

Leave a Replay

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