Appel de fonction static dans fonction template

Appel de fonction static dans fonction template - C++ - Programmation

Marsh Posté le 14-01-2005 à 08:36:32    

Bonjour,
 
je ne sais pas pourquoi mais quelque chose m'echappe. Il me semble avoir deja fait ca des centaines de fois mais le code ci-dessous ne compile pas. Quelqu'un peut me dire quelle est la syntaxe correcte? VC++ ne trouve pas la fonction static_function dans la classe T alors que celle-ci existe.
 

Code :
  1. template <typename T> void function(T& t, int dummy)
  2. {
  3.     t = T::static_function(dummy);
  4. }


 
Ce code la par contre compile:
 

Code :
  1. template <typename T> void function(T& t, int dummy)
  2. {
  3.     t = t.static_function(dummy);
  4. }


 
Mais bon ma fonction est statique donc je ne vois pas pourquoi je ne pourrais pas utiliser T::static_function.
 
Je precise juste que function est une fonction membre (template donc) d'une classe qui n'est pas template elle.
 
Merci
mynab


Message édité par mynab le 14-01-2005 à 08:55:36
Reply

Marsh Posté le 14-01-2005 à 08:36:32   

Reply

Marsh Posté le 14-01-2005 à 08:49:44    

dans function, t est déclarée en const. Aussi, à moins d'avoir un operator = tordu, à votre place j'aurais des doutes sur la validité de la ligne commençant par t =

Reply

Marsh Posté le 14-01-2005 à 08:55:22    

Oups pardon il faut enlever les const. Ils n'y sont pas en fait dans mon code. Je les enleve du premier post. Ma question est donc toujours valide :)

Reply

Marsh Posté le 14-01-2005 à 09:04:05    

Avec Visual 6.0, j'ai aussi eu des problèmes avec les static et template. Apparemment, il n'est pas possible de définir des méthodes static templates dans une classe quelconque. Il faut définir des méthodes static dans une classe template pour que ce soit aceptable.
Tout ca pour te dire que cela vient peut-être simplement de Visual. Si tu as un autre compilateur sous la main ou que tu peut utiliser Visual 7.0, tu aura plus d'indications sur ton problème.

Reply

Marsh Posté le 14-01-2005 à 09:24:27    

Je vais regarder avec un autre compilo mais je suis deje en VC++ .NET 2003 (7.1 donc) donc pas d'upgrade possible de ce cote la :)

Reply

Marsh Posté le 14-01-2005 à 09:31:26    

Hum. Pour essayer avec un autre compilo j'ai ecrit un petit bout de code pour faire la meme chose et meme sous VS 7.1 ca compile... Doit avoir un probleme avec les classes dans mon programme original (qui sont des classes CORBA generees par ACE/TAO). Vais regarder ca de plus pres mais bon je sens que c'est encore un truc qui va gaver...
 

Code :
  1. class A
  2. {
  3. public:
  4.    A(int a) { _a = a; }
  5.    static A a() { return A(2); };
  6.    int _a;
  7. };
  8. class B
  9. {
  10. public:
  11.    template <typename T> void b(T& t)
  12.    {
  13.       t = T::a();
  14.    }
  15. };
  16.  
  17. int _tmain(int argc, _TCHAR* argv[])
  18. {
  19.    A a(1);
  20.    B b;
  21.    b.b(a);
  22.    return 0;
  23. }


 
mynab


Message édité par mynab le 14-01-2005 à 09:31:38
Reply

Marsh Posté le 14-01-2005 à 09:31:35    

Ah, OK, effectivement, c'est plus étonnant comme problème si tu as un compilateur récent.

Reply

Sujets relatifs:

Leave a Replay

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