Redéfinition du flux et template

Redéfinition du flux et template - C++ - Programmation

Marsh Posté le 09-10-2005 à 19:16:29    

Je souhaiterais redéfinir les opérateurs de flux d'une classe template, le problème c'est que les opérateurs de flux doivent être déclarés hors de la classe. Exemple sans les templates:

Code :
  1. class A
  2. {
  3. private:
  4.         int entier;
  5. public :
  6.        A(){}
  7.        friend ostream& operator<<(ostream& out, A);
  8. };
  9. ostream& operator<<(ostream& out, A a)
  10. {
  11. out<<a.entier<<endl;
  12. }


 
 
Avec les template ça ne fonctionne pas:
 

Code :
  1. template<typename T>
  2. class Vector
  3. {
  4.       protected:
  5.         T _x, _y, _z;
  6.        public:
  7.               Vector();
  8.               Vector(T x, T y, T z);
  9.               virtual ~Vector();
  10.               virtual Vector operator^(Vector v)const;
  11.               friend ostream& operator<<(ostream& out, Vector<T> );
  12.               friend istream& operator>>(ostream& out, Vector<T> );
  13. };
  14. template<typename T>
  15. ostream& operator<<(ostream& out, Vector<T> v)
  16. {
  17. out<<v._x<<',';
  18. out<<v._y<<',';
  19. out<<v._z<<endl;
  20. }


 
Comment dois-je faire? merci

Reply

Marsh Posté le 09-10-2005 à 19:16:29   

Reply

Marsh Posté le 09-10-2005 à 19:39:23    

friend template<U> ostream& operator<<(ostream& out, Vector<U> );
 
ca marchera mieux ...
 
et les friend c'est laid :o

Reply

Marsh Posté le 09-10-2005 à 20:09:17    

et ça sert à rien dans ce genre de situation.

Reply

Marsh Posté le 09-10-2005 à 20:38:15    

Merci mais Ca ne fonctionne pas non plus... ca ne compile pas.
 
Normalement je pourrais accéder directement comme ça?? :
[cpp]
Vector<float> u(0.0f, 0.0f, 10.0f);
cout<<u<<endl;
[\cpp]
 
Taz d'avoir la fonction "friend" sert à accéder aux membres de la classe sans accesseurs, comme si c'était une méthode de la classe. Je ne comprend donc pas pourquoi tu dit ça?

Reply

Marsh Posté le 09-10-2005 à 20:48:35    

ben justement, ça ne sert à rien ici. Tu peux faire autrement. Et sans péter l'abstraction.
 

Code :
  1. class C
  2. {
  3.   public:
  4.   void dump(ostream & ) const;
  5.   void load(istream & );
  6. };
  7. inline ostream & operator<<(ostream & o, const C & c) { c.dump(o); return o; }
  8. inline istream & operator>>(istream & i, C & c) { c.load(i); return i; }

Reply

Marsh Posté le 09-10-2005 à 22:42:19    

Je te remercie c'est cool  :hello:  :)

Reply

Sujets relatifs:

Leave a Replay

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