 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Drakkhen Guest
|
Posted: Thu May 20, 2004 8:47 am Post subject: conflit de nom |
|
|
Bonjour,
J'ai besoin de nommer une fonction de classe : sqrt
et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Pourriez-vous svp me dire comment faire?
merci.
|
|
| Back to top |
|
 |
Anthony Fleury Guest
|
Posted: Thu May 20, 2004 9:23 am Post subject: Re: conflit de nom |
|
|
Drakkhen wrote:
Bonjour,
| Quote: | J'ai besoin de nommer une fonction de classe : sqrt
et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
|
Présenté ainsi il n'y a aucun conflit de nom. Il suffit d'utiliser
l'opérateur de résolution de portée ::.
#include <math.h>
class foo {
public:
double sqrt(double) { ::sqrt(2.0); }
};
l'operateur :: ira chercher sqrt() dans l'espace de nom global et ainsi la
fonction sqrt de foo ne s'appelera pas récursivement.
De plus, les en-têtes de la librairie standard utilisent maintenant (pour
les compilateurs qui respectent cette partie de la norme) l'espace de nom
`std' pour leurs inclusions. Donc la fonction sqrt, sauf using definition,
se retrouverai accessible par std::sqrt(2.0).
Anthony
--
"You could be my unintended, choice to live my life extended
You should be the one I'll always love, I'll be there as soon as I can
But I'm busy mending broken pieces of the life I had before"
(C) Muse - Unintended
|
|
| Back to top |
|
 |
Jean-Noël Mégoz Guest
|
Posted: Sun May 23, 2004 2:14 am Post subject: Re: conflit de nom |
|
|
"Anthony Fleury" <fleury_anthony (AT) _hotmail_ (DOT) com> a écrit dans le message de
news:40ac7a1f$0$7707$636a15ce (AT) news (DOT) free.fr...
| Quote: | Drakkhen wrote:
Bonjour,
Bonjour,
J'ai besoin de nommer une fonction de classe : sqrt
et j'ai besoin d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Présenté ainsi il n'y a aucun conflit de nom. Il suffit d'utiliser
l'opérateur de résolution de portée ::.
#include
class foo {
public:
double sqrt(double) { ::sqrt(2.0); }
};
l'operateur :: ira chercher sqrt() dans l'espace de nom global et ainsi la
fonction sqrt de foo ne s'appelera pas récursivement.
|
J'ai du mal à saisir le caractère indispensable de nommer une fonction
"sqrt" ! )
Ceci dit, la réponse d'Anthony est instructive. Merci !
J.No.
|
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Sun May 23, 2004 7:25 pm Post subject: Re: conflit de nom |
|
|
Anthony Fleury <fleury_anthony (AT) _hotmail_ (DOT) com> writes:
| Quote: | Drakkhen wrote:
J'ai besoin de nommer une fonction de classe : sqrt et j'ai besoin
d'utiliser la fonction sqrt de math.h dedans.
Je me retrouve avec un conflit de nom que je ne sais pas resoudre.
Présenté ainsi il n'y a aucun conflit de nom. Il suffit
d'utiliser l'opérateur de résolution de portée ::.
#include
class foo {
public:
double sqrt(double) { ::sqrt(2.0); }
};
l'operateur :: ira chercher sqrt() dans l'espace de nom global et
ainsi la fonction sqrt de foo ne s'appelera pas récursivement.
|
Attention cependant. La norme l'interdit, mais c'est assez fréquent
que les en-têtes C contient des macros à la place des fonctions.
Disons quelque chose du genre :
extern double sqrt( double ) ;
#define sqrt( d ) __builtin_sqrt( d )
J'ai déjà eu ce problème dans la passée (pas très distante,
d'ailleurs).
--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|
|
| 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
|
|