On Thu, 06 May 2004 11:48:41 +0200, schneider jp wrote:
bonjour,
comment retourner un equivalent de NULL par reference?
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle ne l'a pa trouvé?
Renvoyer un objet (statique) du type "pipe" qui contient l'information "ce n'est pas une pipe".
s/pipe/Group/g
-- Horst
Samuel Krempp
le Thursday 06 May 2004 12:00, écrivit :
schneider jp wrote:
bonjour,
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on ne peut avoir un NULL dedans.
c'est même garanti, ce qui fait un interêt des références.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle ne l'a pa trouvé?
Personnellement je fais : bool findGroup(const string & name, Group & result);
ou alors on garde la signature Group& findGroup(const string& name) en signalant les problèmes par des exceptions. ça donne un style fonctionnel que je trouve plus limpide, pour peu que la possibilité d'exceptions convienne au contexte.
-- Sam
le Thursday 06 May 2004 12:00, cdevienne@alphacent.com écrivit :
schneider jp wrote:
bonjour,
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on ne
peut avoir un NULL dedans.
c'est même garanti, ce qui fait un interêt des références.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier
qu'elle ne l'a pa trouvé?
Personnellement je fais :
bool findGroup(const string & name, Group & result);
ou alors on garde la signature
Group& findGroup(const string& name)
en signalant les problèmes par des exceptions.
ça donne un style fonctionnel que je trouve plus limpide, pour peu que la
possibilité d'exceptions convienne au contexte.
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on ne peut avoir un NULL dedans.
c'est même garanti, ce qui fait un interêt des références.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle ne l'a pa trouvé?
Personnellement je fais : bool findGroup(const string & name, Group & result);
ou alors on garde la signature Group& findGroup(const string& name) en signalant les problèmes par des exceptions. ça donne un style fonctionnel que je trouve plus limpide, pour peu que la possibilité d'exceptions convienne au contexte.
-- Sam
kanze
Christophe de VIENNE wrote in message news:<newscache$keeaxh$kdk$...
schneider jp wrote:
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on ne peut avoir un NULL dedans.
Pas seulement généralement. Par définition, une référence désigne toujours un objet. Elle n'est donc jamais nulle.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle ne l'a pa trouvé?
Personnellement je fais : bool findGroup(const string & name, Group & result);
Personnellement, je fais :
Group* findGroup( std::string const& name ) ;
Si on veut renvoyer un pointeur, on en renvoie un pointeur.
D'ailleurs, ta fonction ne marche pas dans le cas où Group ne supporte pas la copie ou qu'il n'a pas de constructeur par défaut. Ni le cas où on veut en fait renvoyer un objet qui dérive de Group. Ni où on renvoie une référence pour que l'utilisateur peut modifier l'objet qu'on renvoie. En somme, à peu près toutes les raisons qui nous auraient pu conduire à vouloir renvoyer une référence pour commencer.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Christophe de VIENNE <cdevienne@alphacent.com> wrote in message
news:<newscache$keeaxh$kdk$1@guronzan.alphacent.com>...
schneider jp wrote:
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on
ne peut avoir un NULL dedans.
Pas seulement généralement. Par définition, une référence désigne
toujours un objet. Elle n'est donc jamais nulle.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier
qu'elle ne l'a pa trouvé?
Personnellement je fais :
bool findGroup(const string & name, Group & result);
Personnellement, je fais :
Group* findGroup( std::string const& name ) ;
Si on veut renvoyer un pointeur, on en renvoie un pointeur.
D'ailleurs, ta fonction ne marche pas dans le cas où Group ne supporte
pas la copie ou qu'il n'a pas de constructeur par défaut. Ni le cas où
on veut en fait renvoyer un objet qui dérive de Group. Ni où on renvoie
une référence pour que l'utilisateur peut modifier l'objet qu'on
renvoie. En somme, à peu près toutes les raisons qui nous auraient pu
conduire à vouloir renvoyer une référence pour commencer.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Christophe de VIENNE wrote in message news:<newscache$keeaxh$kdk$...
schneider jp wrote:
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on ne peut avoir un NULL dedans.
Pas seulement généralement. Par définition, une référence désigne toujours un objet. Elle n'est donc jamais nulle.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle ne l'a pa trouvé?
Personnellement je fais : bool findGroup(const string & name, Group & result);
Personnellement, je fais :
Group* findGroup( std::string const& name ) ;
Si on veut renvoyer un pointeur, on en renvoie un pointeur.
D'ailleurs, ta fonction ne marche pas dans le cas où Group ne supporte pas la copie ou qu'il n'a pas de constructeur par défaut. Ni le cas où on veut en fait renvoyer un objet qui dérive de Group. Ni où on renvoie une référence pour que l'utilisateur peut modifier l'objet qu'on renvoie. En somme, à peu près toutes les raisons qui nous auraient pu conduire à vouloir renvoyer une référence pour commencer.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Christophe de VIENNE
wrote:
Christophe de VIENNE wrote in message news:<newscache$keeaxh$kdk$...
schneider jp wrote:
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on ne peut avoir un NULL dedans.
Pas seulement généralement. Par définition, une référence désigne toujours un objet. Elle n'est donc jamais nulle.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle ne l'a pa trouvé?
Personnellement je fais : bool findGroup(const string & name, Group & result);
Personnellement, je fais :
Group* findGroup( std::string const& name ) ;
Si on veut renvoyer un pointeur, on en renvoie un pointeur.
D'ailleurs, ta fonction ne marche pas dans le cas où Group ne supporte pas la copie ou qu'il n'a pas de constructeur par défaut. Ni le cas où on veut en fait renvoyer un objet qui dérive de Group. Ni où on renvoie une référence pour que l'utilisateur peut modifier l'objet qu'on renvoie. En somme, à peu près toutes les raisons qui nous auraient pu conduire à vouloir renvoyer une référence pour commencer.
En effet. J'ai pas trop réfléchi avant de poster que je citais un cas bien particulier:
Dans mon application je fais une mise en cache de certains résultats calculés, qui sont des classes copiable avec une sémantique de valeur.
Et le cache manager a des fonctions du style : bool getResult( key, result & ); ce qui s'intègre très bien avec la façon dont sont fait les calculs.
Je réfléchirais un peu plus avant de poster :-)
A+
Christophe
kanze@gabi-soft.fr wrote:
Christophe de VIENNE <cdevienne@alphacent.com> wrote in message
news:<newscache$keeaxh$kdk$1@guronzan.alphacent.com>...
schneider jp wrote:
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on
ne peut avoir un NULL dedans.
Pas seulement généralement. Par définition, une référence désigne
toujours un objet. Elle n'est donc jamais nulle.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier
qu'elle ne l'a pa trouvé?
Personnellement je fais :
bool findGroup(const string & name, Group & result);
Personnellement, je fais :
Group* findGroup( std::string const& name ) ;
Si on veut renvoyer un pointeur, on en renvoie un pointeur.
D'ailleurs, ta fonction ne marche pas dans le cas où Group ne supporte
pas la copie ou qu'il n'a pas de constructeur par défaut. Ni le cas où
on veut en fait renvoyer un objet qui dérive de Group. Ni où on renvoie
une référence pour que l'utilisateur peut modifier l'objet qu'on
renvoie. En somme, à peu près toutes les raisons qui nous auraient pu
conduire à vouloir renvoyer une référence pour commencer.
En effet. J'ai pas trop réfléchi avant de poster que je citais un cas
bien particulier:
Dans mon application je fais une mise en cache de certains résultats
calculés, qui sont des classes copiable avec une sémantique de valeur.
Et le cache manager a des fonctions du style :
bool getResult( key, result & );
ce qui s'intègre très bien avec la façon dont sont fait les calculs.
Christophe de VIENNE wrote in message news:<newscache$keeaxh$kdk$...
schneider jp wrote:
comment retourner un equivalent de NULL par reference?
Il vaut mieux éviter... Une référence sous entends généralement qu'on ne peut avoir un NULL dedans.
Pas seulement généralement. Par définition, une référence désigne toujours un objet. Elle n'est donc jamais nulle.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle ne l'a pa trouvé?
Personnellement je fais : bool findGroup(const string & name, Group & result);
Personnellement, je fais :
Group* findGroup( std::string const& name ) ;
Si on veut renvoyer un pointeur, on en renvoie un pointeur.
D'ailleurs, ta fonction ne marche pas dans le cas où Group ne supporte pas la copie ou qu'il n'a pas de constructeur par défaut. Ni le cas où on veut en fait renvoyer un objet qui dérive de Group. Ni où on renvoie une référence pour que l'utilisateur peut modifier l'objet qu'on renvoie. En somme, à peu près toutes les raisons qui nous auraient pu conduire à vouloir renvoyer une référence pour commencer.
En effet. J'ai pas trop réfléchi avant de poster que je citais un cas bien particulier:
Dans mon application je fais une mise en cache de certains résultats calculés, qui sont des classes copiable avec une sémantique de valeur.
Et le cache manager a des fonctions du style : bool getResult( key, result & ); ce qui s'intègre très bien avec la façon dont sont fait les calculs.
Je réfléchirais un peu plus avant de poster :-)
A+
Christophe
drkm
Horst Kraemer writes:
Renvoyer un objet (statique) du type "pipe" qui contient l'information "ce n'est pas une pipe". ^^
« Ceci n'est pas une pipe. »
;-)
--drkm
Horst Kraemer <horst.kraemer@epost.de> writes:
Renvoyer un objet (statique) du type "pipe" qui contient l'information
"ce n'est pas une pipe".
^^
comment retourner un equivalent de NULL par reference?
on ne peut pas.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle
ne l'a pa trouvé?
le mieux, AMA, est de ne rien renvoyer (puisqu'elle n'a rien trouvé) mais de lever une exception.
Renvoyer un objet (statique) du type "pipe" qui contient l'information "ce n'est pas une pipe".
s/pipe/Group/g
-- Horst
Alain Naigeon
"Alexandre" a écrit dans le message news: 40c18ca1$0$7703$
bonjour,
comment retourner un equivalent de NULL par reference?
on ne peut pas.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle
ne l'a pa trouvé?
Tu peux créer en static un Group très spécial que tu reconnaîtras, appelé GroupeRien ou un truc de ce genre, et tu le renvoies. Il faut évidemment que la classe Group ait un operator != pour pouvoir écrire if( GroupeRetour != GroupeRien)
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
"Alexandre" <alex.g@netcourrier.com> a écrit dans le message news:
40c18ca1$0$7703$636a15ce@news.free.fr...
bonjour,
comment retourner un equivalent de NULL par reference?
on ne peut pas.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier
qu'elle
ne l'a pa trouvé?
Tu peux créer en static un Group très spécial que tu reconnaîtras,
appelé GroupeRien ou un truc de ce genre, et tu le renvoies.
Il faut évidemment que la classe Group ait un operator != pour
pouvoir écrire if( GroupeRetour != GroupeRien)
--
Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - anaigeon@free.fr - Strasbourg, France
"Alexandre" a écrit dans le message news: 40c18ca1$0$7703$
bonjour,
comment retourner un equivalent de NULL par reference?
on ne peut pas.
en fait j'ai une fonction :
Group & findGroup(const string & name);
si elle trouve le bon groupe elle le renvoie mais comment signifier qu'elle
ne l'a pa trouvé?
Tu peux créer en static un Group très spécial que tu reconnaîtras, appelé GroupeRien ou un truc de ce genre, et tu le renvoies. Il faut évidemment que la classe Group ait un operator != pour pouvoir écrire if( GroupeRetour != GroupeRien)
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France