OVH Cloud OVH Cloud

Constructeur "par defaut"

14 réponses
Avatar
Mathieu Malaterre
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

4 réponses

1 2
Avatar
James Kanze
Fabien LE LEZ writes:

|> On 23 Jun 2004 08:19:15 +0200, Jean-Marc Bourguet :

|> >> 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
Avatar
James Kanze
Mathieu Malaterre writes:

|> 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
Avatar
Mathieu Malaterre
Jean-Marc Bourguet wrote:
Mathieu Malaterre 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


Avatar
Fabien LE LEZ
On Wed, 23 Jun 2004 17:34:01 GMT, Mathieu Malaterre
:

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

1 2