| View previous topic :: View next topic |
| Author |
Message |
Mathieu Malaterre Guest
|
Posted: Wed Jun 23, 2004 3:21 am Post subject: Constructeur "par defaut" |
|
|
Voila mon probleme j'ai une classe:
class foo{
public:
foo(bool b);
foo(std::string const &s);
};
Le probleme c'est que lorsque je l'utilise typiquement en passant
argv[1] (const char*), c++ definit comme comportement par defaut de
prendre l'operation la plus simple. Dans mon cas il va caster mon const
char* en bool plutot que de demander le constructeur de string.
Est-ce qu'un guru c++ sait s'il y a un moyen de force la bete a utiliser
celui que je veux ?
Merci
Mathieu
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Wed Jun 23, 2004 3:55 am Post subject: Re: Constructeur "par defaut" |
|
|
On Wed, 23 Jun 2004 03:21:53 GMT, Mathieu Malaterre <malat (AT) free (DOT) fr>:
| Quote: | Le probleme c'est que lorsque je l'utilise typiquement en passant
argv[1] (const char*)
|
Non, char* (du moins si tu parles bien des arguments de main()).
| Quote: | Est-ce qu'un guru c++ sait s'il y a un moyen de force la bete a utiliser
celui que je veux ?
|
foo mon_fou (std::string (argv[1]));
--
schtroumpf schtroumpf
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Wed Jun 23, 2004 3:57 am Post subject: Re: Constructeur "par defaut" |
|
|
On Wed, 23 Jun 2004 05:55:44 +0200, Fabien LE LEZ
<gramster (AT) gramster (DOT) com>:
| Quote: | foo mon_fou (std::string (argv[1]));
|
Au fait, est-ce que ceci est considéré comme un cast, au même titre
que static_cast<std::string>(argv[1]) ?
--
schtroumpf schtroumpf
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Wed Jun 23, 2004 6:18 am Post subject: Re: Constructeur "par defaut" |
|
|
Mathieu Malaterre <malat (AT) free (DOT) fr> writes:
| Quote: | class foo{
public:
foo(bool b);
foo(std::string const &s);
};
Le probleme c'est que lorsque je l'utilise typiquement en passant argv[1]
(const char*), c++ definit comme comportement par defaut de prendre
l'operation la plus simple. Dans mon cas il va caster mon const char* en
bool plutot que de demander le constructeur de string.
Est-ce qu'un guru c++ sait s'il y a un moyen de force la bete a utiliser
celui que je veux ?
|
Ajouter le constructeur
foo(char const*);
naturellement.
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 |
|
 |
Jean-Marc Bourguet Guest
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Wed Jun 23, 2004 6:20 am Post subject: Re: Constructeur "par defaut" |
|
|
On 23 Jun 2004 08:19:15 +0200, Jean-Marc Bourguet <jm (AT) bourguet (DOT) org>:
| Quote: | Au fait, est-ce que ceci est considéré comme un cast, au même titre
que static_cast<std::string>(argv[1]) ?
Ca fait la meme operation
|
Je sais. Ma question n'est qu'une question de vocabulaire : peut-on
appeler ça un "cast" ?
--
schtroumpf schtroumpf
|
|
| Back to top |
|
 |
Aurélien REGAT-BARREL Guest
|
Posted: Wed Jun 23, 2004 8:11 am Post subject: [HS] Constructeur "par defaut" |
|
|
| Quote: | Voila mon probleme j'ai une classe:
class foo{
public:
foo(bool b);
foo(std::string const &s);
};
|
Ne serait-ce pas plutôt vtkFoo ? ;-)
--
Aurélien REGAT-BARREL
|
|
| Back to top |
|
 |
Mathieu Malaterre Guest
|
Posted: Wed Jun 23, 2004 5:34 pm Post subject: Re: Constructeur "par defaut" |
|
|
Fabien LE LEZ wrote:
| Quote: | On Wed, 23 Jun 2004 03:21:53 GMT, Mathieu Malaterre <malat (AT) free (DOT) fr>:
Le probleme c'est que lorsque je l'utilise typiquement en passant
argv[1] (const char*)
Non, char* (du moins si tu parles bien des arguments de main()).
Est-ce qu'un guru c++ sait s'il y a un moyen de force la bete a utiliser
celui que je veux ?
foo mon_fou (std::string (argv[1]));
|
Ca veut dire qu'un utilisateur de ma classe doit lire la documentation
qui va alors lui indiquer qu'il ne peut pas passer des const char*, mais
qu'il doit faire lui meme les cast explicit.
J'ai beau rajouter un explicit devans la declaration de la classe, g++
s'en moque et me cast mon char* (ou const char*) en bool sans me prevenir...
Merci
Mathieu
|
|
| Back to top |
|
 |
Mathieu Malaterre Guest
|
Posted: Wed Jun 23, 2004 5:35 pm Post subject: Re: Constructeur "par defaut" |
|
|
Jean-Marc Bourguet wrote:
| Quote: | Mathieu Malaterre <malat (AT) free (DOT) fr> writes:
class foo{
public:
foo(bool b);
foo(std::string const &s);
};
Le probleme c'est que lorsque je l'utilise typiquement en passant argv[1]
(const char*), c++ definit comme comportement par defaut de prendre
l'operation la plus simple. Dans mon cas il va caster mon const char* en
bool plutot que de demander le constructeur de string.
Est-ce qu'un guru c++ sait s'il y a un moyen de force la bete a utiliser
celui que je veux ?
Ajouter le constructeur
foo(char const*);
naturellement.
|
J'ai une douzaine de classes comme j'ai pas envie de rajouter un 'patch'
bizarre comme ca.
Mathieu
|
|
| Back to top |
|
 |
Mathieu Malaterre Guest
|
Posted: Wed Jun 23, 2004 5:36 pm Post subject: Re: [HS] Constructeur "par defaut" |
|
|
Aurélien REGAT-BARREL wrote:
| Quote: | Voila mon probleme j'ai une classe:
class foo{
public:
foo(bool b);
foo(std::string const &s);
};
Ne serait-ce pas plutôt vtkFoo ?
|
Ben non :p c'est sur mon temps libre, je dev sur la lib gdcm:
http://creatis-www.insa-lyon.fr/Public/Gdcm/
Mathieu
|
|
| Back to top |
|
 |
Franck Branjonneau Guest
|
Posted: Wed Jun 23, 2004 6:19 pm Post subject: Re: Constructeur "par defaut" |
|
|
Mathieu Malaterre <mmalater (AT) nycap (DOT) rr.com> écrivait:
| Quote: | Jean-Marc Bourguet wrote:
Mathieu Malaterre <malat (AT) free (DOT) fr> writes:
class foo{
public:
foo(bool b);
foo(std::string const &s);
};
Le probleme c'est que lorsque je l'utilise typiquement en passant argv[1]
(const char*), c++ definit comme comportement par defaut de prendre
l'operation la plus simple. Dans mon cas il va caster mon const char* en
bool plutot que de demander le constructeur de string.
Est-ce qu'un guru c++ sait s'il y a un moyen de force la bete a utiliser
celui que je veux ?
Ajouter le constructeur
foo(char const*);
naturellement.
J'ai une douzaine de classes comme j'ai pas envie de rajouter un
'patch' bizarre comme ca.
|
Alors enlever
foo(std::string const &)
et ajouter
template< typename InputIterator >
foo(InputIterator first, InputIterator last)
--
Franck Branjonneau <fasbjx (AT) free (DOT) fr>
|
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Wed Jun 23, 2004 9:33 pm Post subject: Re: Constructeur "par defaut" |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
| Quote: | On 23 Jun 2004 08:19:15 +0200, Jean-Marc Bourguet <jm (AT) bourguet (DOT) org>:
Au fait, est-ce que ceci est considéré comme un cast, au même
titre que static_cast<std::string>(argv[1]) ?
Ca fait la meme operation
Je sais. Ma question n'est qu'une question de vocabulaire : peut-on
appeler ça un "cast" ?
|
La norme le fait.
--
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 |
|
 |
James Kanze Guest
|
Posted: Wed Jun 23, 2004 9:34 pm Post subject: Re: Constructeur "par defaut" |
|
|
Mathieu Malaterre <mmalater (AT) nycap (DOT) rr.com> writes:
| Quote: | J'ai une douzaine de classes comme j'ai pas envie de rajouter un
'patch' bizarre comme ca.
|
Dire ce que tu veux, c'est un « patch bizarre » ?
--
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 |
|
 |
Mathieu Malaterre Guest
|
Posted: Thu Jun 24, 2004 2:25 am Post subject: Re: Constructeur "par defaut" |
|
|
Jean-Marc Bourguet wrote:
| Quote: | Mathieu Malaterre <malat (AT) free (DOT) fr> writes:
class foo{
public:
foo(bool b);
foo(std::string const &s);
};
Le probleme c'est que lorsque je l'utilise typiquement en passant argv[1]
(const char*), c++ definit comme comportement par defaut de prendre
l'operation la plus simple. Dans mon cas il va caster mon const char* en
bool plutot que de demander le constructeur de string.
Est-ce qu'un guru c++ sait s'il y a un moyen de force la bete a utiliser
celui que je veux ?
Ajouter le constructeur
foo(char const*);
naturellement.
|
Ok, j'avais tord, desole. C'est la solution la plus simple et la plus
durable.
Merci de la suggestion
Mathieu
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Thu Jun 24, 2004 7:04 am Post subject: Re: Constructeur "par defaut" |
|
|
On Wed, 23 Jun 2004 17:34:01 GMT, Mathieu Malaterre
<mmalater (AT) nycap (DOT) rr.com>:
| Quote: | J'ai beau rajouter un explicit devans la declaration de la classe, g++
s'en moque et me cast mon char* (ou const char*) en bool sans me prevenir...
|
Comme il a été dit ailleurs, faire un constructeur qui accepte un
"char const*" résoud ton problème.
--
schtroumpf schtroumpf
|
|
| Back to top |
|
 |
|