C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

template et friend

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Cyril Gruau
Guest





PostPosted: Tue Jul 29, 2003 12:55 pm    Post subject: template et friend Reply with 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


Back to top
Cyril Gruau
Guest





PostPosted: Tue Jul 29, 2003 1:08 pm    Post subject: Re: template et friend Reply with 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

Cyril
Back to top
Christophe de Vienne
Guest





PostPosted: Tue Jul 29, 2003 1:11 pm    Post subject: Re: template et friend Reply with quote



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





PostPosted: Wed Jul 30, 2003 9:54 am    Post subject: Re: template et friend Reply with quote

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





PostPosted: Wed Jul 30, 2003 9:58 am    Post subject: Re: template et friend Reply with quote

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





PostPosted: Wed Jul 30, 2003 2:42 pm    Post subject: Re: template et friend Reply with quote

"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





PostPosted: Thu Jul 31, 2003 6:38 pm    Post subject: Re: template et friend Reply with quote

[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





PostPosted: Fri Aug 01, 2003 9:54 am    Post subject: Re: template et friend Reply with quote

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





PostPosted: Fri Aug 01, 2003 9:55 am    Post subject: Re: template et friend Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.