n'est pas accepte par tous les compilateurs (notamment cl.exe) ?
Cyril
Ce que je ferais plutot, c'est de ne pas mettre les opérateurs en friend, et déclarer une fonction MaClasse<>::print(ostream &), que tu appelles dans l'opérateur :
template<class T> ostream & operator<<(ostream & o, const MaClasse<T> & a) { a.print(o); return o; }
J'imagine que plus de compilateurs l'accepterons.
A+
Christophe
-- Christophe de Vienne Experience is something you don't get until just after you need it. Oliver's Law.
n'est pas accepte par tous les compilateurs (notamment cl.exe) ?
Cyril
Ce que je ferais plutot, c'est de ne pas mettre les opérateurs en friend, et
déclarer une fonction MaClasse<>::print(ostream &), que tu appelles dans
l'opérateur :
template<class T>
ostream & operator<<(ostream & o, const MaClasse<T> & a)
{
a.print(o);
return o;
}
J'imagine que plus de compilateurs l'accepterons.
A+
Christophe
--
Christophe de Vienne
Experience is something you don't get until just after you need it.
Oliver's Law.
n'est pas accepte par tous les compilateurs (notamment cl.exe) ?
Cyril
Ce que je ferais plutot, c'est de ne pas mettre les opérateurs en friend, et déclarer une fonction MaClasse<>::print(ostream &), que tu appelles dans l'opérateur :
template<class T> ostream & operator<<(ostream & o, const MaClasse<T> & a) { a.print(o); return o; }
J'imagine que plus de compilateurs l'accepterons.
A+
Christophe
-- Christophe de Vienne Experience is something you don't get until just after you need it. Oliver's Law.
Cyril.Gruau
Ce que je ferais plutot, c'est de ne pas mettre les opérateurs en friend, et déclarer une fonction MaClasse<>::print(ostream &), que tu appelles dans l'opérateur :
template<class T> ostream & operator<<(ostream & o, const MaClasse<T> & a) { a.print(o); return o; }
J'imagine que plus de compilateurs l'accepterons.
Vrai, mais si je peux eviter de transferer les corps de tous mes fonctions amies dans des methodes membres ...
Cyril
Ce que je ferais plutot, c'est de ne pas mettre les opérateurs en friend, et
déclarer une fonction MaClasse<>::print(ostream &), que tu appelles dans
l'opérateur :
template<class T>
ostream & operator<<(ostream & o, const MaClasse<T> & a)
{
a.print(o);
return o;
}
J'imagine que plus de compilateurs l'accepterons.
Vrai, mais si je peux eviter de transferer les corps de tous mes
fonctions amies dans des methodes membres ...
Ce que je ferais plutot, c'est de ne pas mettre les opérateurs en friend, et déclarer une fonction MaClasse<>::print(ostream &), que tu appelles dans l'opérateur :
template<class T> ostream & operator<<(ostream & o, const MaClasse<T> & a) { a.print(o); return o; }
J'imagine que plus de compilateurs l'accepterons.
Vrai, mais si je peux eviter de transferer les corps de tous mes fonctions amies dans des methodes membres ...
template<class T> ostream& operator<<(ostream& os, MaClasse<T> const& c) { os << c.x; return os; }
template<class T> istream& operator>>(istream& is, MaClasse<T> const& c) { is >> c.x; return is; }
n'est pas accepté? C'est quoi les erreurs?
(C'est volontairement que je déclare istream et ostream comme ça pour éviter des problèmes éventuels avec les namespaces).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
template<class T>
ostream& operator<<(ostream& os, MaClasse<T> const& c)
{
os << c.x;
return os;
}
template<class T>
istream& operator>>(istream& is, MaClasse<T> const& c)
{
is >> c.x;
return is;
}
n'est pas accepté? C'est quoi les erreurs?
(C'est volontairement que je déclare istream et ostream comme ça pour
éviter des problèmes éventuels avec les namespaces).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
template<class T> ostream& operator<<(ostream& os, MaClasse<T> const& c) { os << c.x; return os; }
template<class T> istream& operator>>(istream& is, MaClasse<T> const& c) { is >> c.x; return is; }
n'est pas accepté? C'est quoi les erreurs?
(C'est volontairement que je déclare istream et ostream comme ça pour éviter des problèmes éventuels avec les namespaces).
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Cyril.Gruau
Tu veux dire que
class istream; class ostream; ostream& operator<<(ostream&, int); istream& operator>>(istream&, int&);