 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Cyril Gruau Guest
|
Posted: Tue Jul 29, 2003 12:55 pm Post subject: template et friend |
|
|
Comment assurer la portabilite, sachant que :
template<class T> classe MaClasse
{
public:
friend ostream & operator<<<>(ostream & OUT, const MaClasse<T> & A);
friend istream & operator>><>(istream & IN, MaClasse<T> & A);
};
n'est pas accepte par tous les compilateurs (notamment cl.exe) ?
Cyril
|
|
| Back to top |
|
 |
Cyril Gruau Guest
|
Posted: Tue Jul 29, 2003 1:08 pm Post subject: Re: template et friend |
|
|
template<class T> class MaClasse
{
public:
template<class U> friend ostream & operator<<(ostream & OUT,
const MaClasse
template<class U> friend istream & operator>>(istream & IN,
MaClasse<U> & A);
};
semble fonctionner
Cyril
|
|
| Back to top |
|
 |
Christophe de Vienne Guest
|
Posted: Tue Jul 29, 2003 1:11 pm Post subject: Re: template et friend |
|
|
Cyril Gruau wrote:
| Quote: | Comment assurer la portabilite, sachant que :
template<class T> classe MaClasse
{
public:
friend ostream & operator<<<>(ostream & OUT, const MaClasse<T> & A);
friend istream & operator>><>(istream & IN, MaClasse<T> & A);
};
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
{
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.
|
|
| Back to top |
|
 |
Cyril Gruau Guest
|
Posted: Wed Jul 30, 2003 9:54 am Post subject: Re: template et friend |
|
|
| Quote: | 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
{
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
|
|
| Back to top |
|
 |
Cyril Gruau Guest
|
Posted: Wed Jul 30, 2003 9:58 am Post subject: Re: template et friend |
|
|
| Quote: | template<class T> class MaClasse
{
public:
template<class U> friend ostream & operator<<(ostream & OUT,
const MaClasse
template<class U> friend istream & operator>>(istream & IN,
MaClasse<U> & A);
};
semble fonctionner
|
Faux, car ensuite cl.exe n'accepte ni
template<class U> friend ostream & operator<<(ostream & OUT,
const MaClasse
{
U temporaire;
...
}
ni
template<class T> friend ostream & operator<<(ostream & OUT,
const MaClasse
{
T temporaire;
...
}
-> impasse.
Cyril
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Wed Jul 30, 2003 2:42 pm Post subject: Re: template et friend |
|
|
"Cyril Gruau" <Cyril.Gruau (AT) cemef (DOT) cma.fr> a écrit dans le message de
news:3f2795be.91645359 (AT) news (DOT) cma.fr...
| Quote: | 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
{
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 ...
|
Celà permet pourtant un comportement polymorphe...
Chris
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Thu Jul 31, 2003 6:38 pm Post subject: Re: template et friend |
|
|
[email]Cyril.Gruau (AT) cemef (DOT) cma.fr[/email] (Cyril Gruau) writes:
| Quote: | Comment assurer la portabilite, sachant que :
template<class T> classe MaClasse
{
public:
friend ostream & operator<<<>(ostream & OUT, const MaClasse<T> & A);
friend istream & operator>><>(istream & IN, MaClasse<T> & A);
};
n'est pas accepte par tous les compilateurs (notamment cl.exe) ?
|
Tu veux dire que
class istream;
class ostream;
ostream& operator<<(ostream&, int);
istream& operator>>(istream&, int&);
template<class T> class MaClasse;
template<class T>
ostream& operator<<(ostream&, MaClasse
template<class T>
istream& operator>>(istream&, MaClasse<T> const&);
template<class T> class MaClasse
{
public:
friend ostream& operator<< <>(ostream&, MaClasse<T> const&);
friend istream& operator>> <>(istream&, MaClasse<T>&);
private:
int x;
};
template<class T>
ostream& operator<<(ostream& os, MaClasse
{
os << c.x;
return os;
}
template
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
|
|
| Back to top |
|
 |
Cyril Gruau Guest
|
Posted: Fri Aug 01, 2003 9:54 am Post subject: Re: template et friend |
|
|
| Quote: | Tu veux dire que
class istream;
class ostream;
ostream& operator<<(ostream&, int);
istream& operator>>(istream&, int&);
template<class T> class MaClasse;
template<class T
ostream& operator<<(ostream&, MaClasse
template<class T
istream& operator>>(istream&, MaClasse<T> const&);
template<class T> class MaClasse
{
public:
friend ostream& operator<< <>(ostream&, MaClasse<T> const&);
friend istream& operator>> <>(istream&, MaClasse<T>&);
private:
int x;
};
template<class T
ostream& operator<<(ostream& os, MaClasse
{
os << c.x;
return os;
}
template
istream& operator>>(istream& is, MaClasse<T> const& c)
{
is >> c.x;
return is;
}
n'est pas accepté? C'est quoi les erreurs?
|
Tout simplement
syntax error : missing ';' before '<'
sur la ligne
| Quote: | friend ostream& operator<< <>(ostream&, MaClasse<T> const&);
|
a cause du <>
Cyril
|
|
| Back to top |
|
 |
Cyril Gruau Guest
|
Posted: Fri Aug 01, 2003 9:55 am Post subject: Re: template et friend |
|
|
| Quote: | Celà permet pourtant un comportement polymorphe...
|
Et de fait, je reconnais que c'est la seule solution qui fonctionne
bien (ceci-dit, il me reste encore quelques compilateurs a tester).
Cyril
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|