probleme template

probleme template - C++ - Programmation

Marsh Posté le 20-07-2004 à 23:56:29    

Salut
J'ai un probleme avec le bout de code suivant :  
 

Code :
  1. #include <vector>
  2. template<typename T>
  3. class MyIterator
  4. {
  5. public:
  6.   typedef typename std::vector<T>::iterator iterator;
  7.   operator iterator& () { return _i; }
  8. private:
  9.   iterator _i;
  10. };
  11. template<typename T>
  12. class UtiliseMyIterator
  13. {
  14. public:
  15.   virtual void f()
  16.   {
  17.     MyIterator<T> it;
  18.     T t = *it;
  19.   }
  20. };
  21. template class UtiliseMyIterator<long>;
  22. template class UtiliseMyIterator<double>;
  23. template class UtiliseMyIterator<bool>;
  24. template class UtiliseMyIterator<short>;


 
j'essaie de compiler ca sous Sun avec CC5.3, et la troisieme instantiation de template, celle avec bool, me fait une erreur :
operation * MyIterator<bool> is invalid.
pourtant ca marche pour les autres. qu'est ce que le bool a de différent ?
j'ai essayé avec visual studio 6, ca marche.
alors bug dans la compilo de Sun, ou une siouxerie que j'ai pas pigée ?

Reply

Marsh Posté le 20-07-2004 à 23:56:29   

Reply

Marsh Posté le 20-07-2004 à 23:57:33    

c'est quoi ce code?
jocebug?


---------------
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 21-07-2004 à 00:05:30    

Pourquoi UtiliseMyIterator::f() est elle virtuelle ?
 
et tous ces :
  template class UtiliseMyIterator<long>;
  template class UtiliseMyIterator<double>;
  template class UtiliseMyIterator<bool>;
  template class UtiliseMyIterator<short>;  
 
ca sert a quoi o_O ?

Reply

Marsh Posté le 21-07-2004 à 00:06:23    

bein il veut juste les faire instancier par le compilo


---------------
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 21-07-2004 à 00:07:44    

ok ^^ bon ben reste que le bug de SUN (ce qui m'etonenrasi pas)

Reply

Marsh Posté le 21-07-2004 à 00:08:49    

comment ca c'est quoi ce code ?
c un extrait d'un truc bien plus compliqué.
j'ai laissé que ce qui est important pour le probleme
ca devrait compiler normalement
 
pourquoi f est virtuelle ? parce que j'ai envie, peu importe !

Reply

Marsh Posté le 21-07-2004 à 00:09:34    

Oualb a écrit :

comment ca c'est quoi ce code ?
c un extrait d'un truc bien plus compliqué.
j'ai laissé que ce qui est important pour le probleme
ca devrait compiler normalement
 
pourquoi f est virtuelle ? parce que j'ai envie, peu importe !


 
ben voila, les codes partielle c mal.
Serieusement, je penche sur un bug de CC ...
tu as essayé avec un *bon* compilo style gcc 3.3 ?

Reply

Marsh Posté le 21-07-2004 à 00:19:49    

et si tu forces la main sur la conversion?
 

 template<typename T>
  class UtiliseMyIterator
  {
    public:
     
      virtual void f()
      {
          MyIterator<T> it;
          T t = *static_cast<typename MyIterator<T>::iterator>(it);
      }
     
  };


---------------
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 21-07-2004 à 00:24:30    

si je force le cast ca marche ...
 
mais bon pourquoi le cast implicite marche pour tous les types simples du langage sauf pour bool ?
bool c'est un type à part ou quoi ?

Reply

Marsh Posté le 21-07-2004 à 00:27:44    

non, essaye avec juste une seule instanciation d'un autre type intégré


---------------
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 21-07-2004 à 00:27:44   

Reply

Marsh Posté le 21-07-2004 à 00:30:22    

Oualb a écrit :

bool c'est un type à part ou quoi ?


std::vector<bool> oui

Reply

Marsh Posté le 21-07-2004 à 00:30:22    

si je commentes la ligne avec le bool ca marche
y'a vraiment que le bool qui foire
et ca fait chier.
 

Reply

Marsh Posté le 21-07-2004 à 00:32:42    

verdoux a écrit :

std::vector<bool> oui


 
tu peux donner plus de détails la ?
 
en quoi c'est plus spécial que std::vector<long> ?

Reply

Marsh Posté le 21-07-2004 à 00:34:34    

Le guru a dit (et je ne fais que bêtement le répéter)
std::vector<bool> IS NOT a Container
 One consequence of this is that it can't just return a normal bool& from its operator[] or its dereferenced iterators
http://www.gotw.ca/gotw/050.htm


Message édité par verdoux le 21-07-2004 à 00:35:35
Reply

Marsh Posté le 21-07-2004 à 00:34:41    

parce que std::vector a une spécialistion particulère pour les bool (bitmap)


---------------
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 21-07-2004 à 00:43:11    

c'est fou ca !!
j'avais jamais entendu parler de ca  
 
eh bien merci ! je vais me débrouiller autrement
 
genre avec des char, ou alors il faudrait que je vire la spécialisation pour bool, mais bon c'est quand même un peu hacker la STL !

Reply

Marsh Posté le 21-07-2004 à 08:43:35    

genre tu utilise std::bitset

Reply

Sujets relatifs:

Leave a Replay

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