[interrogation écrite] fonction membre template virtuelle

fonction membre template virtuelle [interrogation écrite] - C++ - Programmation

Marsh Posté le 05-10-2003 à 16:24:21    

petite interrogation aujourd'hui. il y a 2 erreurs dans se code. vous allez facilement les repérer, la question c'est en fait de savoir pourquoi est-ce invalide ?
 
le développement d'un autre de mes sujets m'a fait pensé à ce petit problème. saurez vous le trouver et l'expliquer ?
 

Code :
  1. template<typename T>
  2. struct Foo
  3. {
  4.   virtual void compute() const
  5.   { }
  6. };
  7. struct Bar
  8. {
  9.   template<typename U>
  10.   virtual void compute() const
  11.   { }
  12. };
  13. template<typename T>
  14. struct Baz
  15. {
  16.   template<typename U>
  17.   virtual void compute() const
  18.   { }
  19. };
  20. template<typename T>
  21. void computeAll()
  22. {
  23.   Foo<T>().compute();
  24.   Bar().compute<T>();
  25.   Baz<T>().template compute<T>();
  26. }
  27. int main()
  28. {
  29.   computeAll<double>();
  30. }


 
NB : oh un .template
 
biensur après je donne la solution. ce sujet à juste pour but de démasquer un petit piège.


Message édité par Taz le 05-10-2003 à 16:27:10
Reply

Marsh Posté le 05-10-2003 à 16:24:21   

Reply

Marsh Posté le 05-10-2003 à 18:11:03    

ok, vous n'êtes pas joueurs :/

Reply

Marsh Posté le 05-10-2003 à 18:48:54    

j'essaye :
virtual dans une classe de base permet de dire que dans les types dérivées cette fonction peut etre redéfinis alors qu'en mettant le template tu la defini pour tous les types.
 
C'est pas ca TAZ me l'a dit, il a dit aussi que dans ce que j'ai dit y a quelque chose d'interessant pour al réponse mais quoi :??:

Reply

Marsh Posté le 05-10-2003 à 18:52:53    

issu des -vieilles- specs du c++ iso que j'ai:
 

Citation :


14.5.2 Member templates
...
A member function template shall not be virtual.
template<class T> struct AA {
  template<class C> virtual void g(C);   // error
  virtual void f();   // OK


 
Pourquoi? j'y avais jamais réfléchi avant, mais j'imagine que pour faire marcher la virtual table avec cette feature, ça doit compliquer l'implémentation, voir l'allourdir.
 
Pour le .template, c'est pour éviter une ambiguité syntaxique pendant le parsing d'une class template qui utilise elle même des membres template.
 
 


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 05-10-2003 à 18:54:12    

fFluFf a écrit :

j'essaye :
virtual dans une classe de base


c'est sur que dans une classe de petits écoliers ça marche tout de suite moins bien

fFluFf a écrit :


permet de dire que dans les types dérivées cette fonction peut etre redéfinis

non
 

fFluFf a écrit :


alors qu'en mettant le template tu la defini pour tous les types.

:heink:  
 

fFluFf a écrit :

C'est pas ca TAZ me l'a dit, il a dit aussi que dans ce que j'ai dit y a quelque chose d'interessant pour al réponse mais quoi :??:  

pour plus d'incompréhension


Message édité par Taz le 05-10-2003 à 19:01:21
Reply

Marsh Posté le 05-10-2003 à 18:55:26    

SchnapsMann a écrit :

issu des -vieilles- specs du c++ iso que j'ai:
 

Citation :


14.5.2 Member templates
...
A member function template shall not be virtual.
template<class T> struct AA {
  template<class C> virtual void g(C);   // error
  virtual void f();   // OK


 
Pourquoi? j'y avais jamais réfléchi avant, mais j'imagine que pour faire marcher la virtual table avec cette feature, ça doit compliquer l'implémentation, voir l'allourdir.

t'es  pas drole. mais est ce que tu saurais dire plsu précisément pourquoi ?


Message édité par Taz le 05-10-2003 à 18:55:45
Reply

Marsh Posté le 05-10-2003 à 19:00:09    

Taz a écrit :

t'es  pas drole. mais est ce que tu saurais dire plsu précisément pourquoi ?


et bien déjà parce que pour une fonction membre virtuelle donnée, on s'attend à n'en trouver qu'une seule par classe héritière. Or avec une fonction membre template virtuelle, il peut y en avoir plusieurs différentes selon les diverses instanciations se déroulant à la compilation.


Message édité par schnapsmann le 05-10-2003 à 19:01:19

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 05-10-2003 à 19:03:54    

voilà. et comme l'invariant de la POO dis que les informations concernant ces mécanismes font partie de l'objet lui même, et qu'un template engendre potentiellement et à n'importe quand une famille infinie de tempalte instanciés, et dernier point que la taille d'un objet ne doit pas varier,. CQFDs

Reply

Marsh Posté le 05-10-2003 à 19:09:54    

je vois pas en quoi ce que j'ai dis avez des trucs intéressant :??:

Reply

Marsh Posté le 05-10-2003 à 19:12:38    

fFluFf a écrit :

je vois pas en quoi ce que j'ai dis avez des trucs intéressant :??:


 
je te met 10/10, mais juste parce que c'est le jour de dimanche martin  [:tinostar]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 05-10-2003 à 19:12:38   

Reply

Marsh Posté le 06-10-2003 à 00:55:42    

une structure peu contenir une fonction ?
(heu en fait c est quoi ca virtual void compute() const )
 :sweat:


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 06-10-2003 à 07:17:21    

Bah allez, laisse les grandes personnes disctuées et repart t'acheter un bouquin de C++. Reveient d'ici 1 ou 2 ans (j/k)
 
:p  :sol:  :hello:


Message édité par Joel F le 06-10-2003 à 07:17:36
Reply

Marsh Posté le 06-10-2003 à 13:53:22    

grande personne mon cul.
j ai 68 ans.


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 06-10-2003 à 13:54:49    

Ben laisse tber le C/C++ et va faire du cobol :O

Reply

Marsh Posté le 06-10-2003 à 14:04:07    

Dans 1 an j aprenderai a taz comment coder  :whistle:     [:ddsm]


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 06-10-2003 à 14:38:14    

xiluoc a écrit :

grande personne mon cul.
j ai 68 ans.  


Citation :

Date de naissance :   02-04-1983
Métier / Occupations :  STUDENT


 [:meganne]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-10-2003 à 01:41:58    

Harkonnen a écrit :


Citation :

Date de naissance :   02-04-1983
Métier / Occupations :  STUDENT


 [:meganne]


 [:alarmclock119] , vous pensiez vraiemt que j avais 68 ans     [:dams86]


---------------
jeunes con de la derniere averse, vieux con des neiges d'antant.
Reply

Marsh Posté le 07-10-2003 à 08:52:51    

Moi, non.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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