Problème syntaxique de définition de template pour une fonction membre

Problème syntaxique de définition de template pour une fonction membre - C++ - Programmation

Marsh Posté le 18-12-2004 à 17:46:15    

Bonjour à tous  :) ,
 
j'ai un bête problème de syntaxe pour lequel je ne trouve pas de solution.
Voici un petit exemple représentatif du problème que je me pose :
 

Code :
  1. //Si je veux avoir exactement le même resultat que ceci :
  2. template <class VarType>
  3. class MyClass{
  4.      VarType var;
  5. public:
  6.      template<ArgType>
  7.      void fctMembre(VarType _var, ArType arg1){
  8.             var=_var;
  9.             if(_var==(VarType) arg1)
  10.                   cout<<"pwet";
  11.      }
  12. }
  13. void main(){
  14.     MyClass<unsigned> A;
  15.     A.fctMembre (1, (char) 1);
  16. }
  17. //en sortant le corp de ma fonction membre de la declaration :
  18. template <class VarType>
  19. class MyClass{
  20. VarType var;
  21. public:
  22. template<class ArgType>
  23. void fctMembre(VarType, ArgType );
  24. };
  25. //ce double template passe sous dev-c++ mais pas sous MS visual 6.0  
  26. template <class VarType>
  27. template <class ArgType>
  28. void MyClass<VarType>::fctMembre(VarType _var, ArgType arg1){
  29. var=_var;
  30. if(_var==(VarType) arg1)
  31.  cout<<"pwet";
  32. }


 
Je me demandais si c'est une syntaxe standard (et donc une fois de plus VC 6.0 qui pue, sachant que la première solution passe sans problème) ou existe-il une autre manière portable d'avoir le même résultat?

Reply

Marsh Posté le 18-12-2004 à 17:46:15   

Reply

Marsh Posté le 18-12-2004 à 18:21:25    

Tu peux aussi simplifier en faisant :

Code :
  1. template<typename VarType, typename ArgType>
  2. struct MaClass ....


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 18-12-2004 à 19:39:38    

Je sais bien mais le but ici est justement d'eviter ça.  :ange:  
Je ne veux pas surcharger le code d'instanciation de ma classe avec un type qui n'est utilisé que dans une seule de mes fonctions...

Reply

Marsh Posté le 18-12-2004 à 21:23:59    

Tu es obligé d'utiliser le compilateur de VC6 ?


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 19-12-2004 à 03:17:19    

Pour l'instant oui, mais la question est surtout de savoir si c'est bien comme ça que je suis sensé le définir?
 
Et si oui, se sera une raison de plus pour me dépêcher d'abandonner VC6.

Reply

Marsh Posté le 19-12-2004 à 09:13:48    

peak a écrit :

Pour l'instant oui, mais la question est surtout de savoir si c'est bien comme ça que je suis sensé le définir?
 
Et si oui, se sera une raison de plus pour me dépêcher d'abandonner VC6.


 
Oui, les fonctions templates membres ne peuvent être définies qu'à l'intérieur de la déclaration de la classe dans VC++ 6.  :(


Message édité par Lam's le 19-12-2004 à 09:15:49
Reply

Marsh Posté le 19-12-2004 à 10:40:06    

Je comprends pas pourquoi les gens s'acharnent à utiliser le compialteur VC6 lorsque celui de VC7 est dispo gratuitement et fonctionne avec l'IDE de VC6.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 19-12-2004 à 10:45:33    

xterminhate a écrit :

Je comprends pas pourquoi les gens s'acharnent à utiliser le compialteur VC6 lorsque celui de VC7 est dispo gratuitement et fonctionne avec l'IDE de VC6.


 
Entre autres: Compatibilité binaire avec les milliards de DLLs disponibles qui utilisent les MFC.  
 
Et d'autre part, le code produit est très très stable après 6 service packs: tu es sûr de ce que tu produit. Donc il n'y a pas de raison de changer de compilo juste pour le plaisir d'avoir "plus de syntaxe" (même si, certes, c'est de la syntaxe standard), sinon, autant sauter à java ou c#.

Reply

Marsh Posté le 19-12-2004 à 12:36:09    

Les MFC c'est mal ...

Reply

Marsh Posté le 19-12-2004 à 13:32:20    

xterminhate a écrit :

Je comprends pas pourquoi les gens s'acharnent à utiliser le compialteur VC6 lorsque celui de VC7 est dispo gratuitement et fonctionne avec l'IDE de VC6.


 
C'est vrai je ne comprend pas non plus  :sweat:, je vais m'occuper de ça en rentrant ce soir....
 
Merci pour vos réponses!

Reply

Marsh Posté le 19-12-2004 à 13:32:20   

Reply

Marsh Posté le 19-12-2004 à 13:34:48    

Salut peak.
 
Je lie ce post en diagonal, mais, une fois de plus, je vois wue VC6 plante dans la compilation de programme simple. Je viens de connaître des problèmes avec l'utilisation de la STL et des templates.
 
Pour les templates, je ne pouvais pas utiliser de méthode template static dans une classe Article. Le compilateur le refusait avec un joli INTERNAL COMPILER ERROR. Je l'ai contourné en définissant Article comme une classe template et en utilisant des méthodes non templates dans cette classe template. Ca marche et ca s'exécute mais ce n'est pas propre.
 

Reply

Sujets relatifs:

Leave a Replay

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