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 

Reinterpret_cast ?

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





PostPosted: Wed Sep 22, 2004 2:33 am    Post subject: Reinterpret_cast ? Reply with quote



Bonjour,

Je souhaites rendre du code écris en C, compilable par un compilateur
C++ (VC++ 2003).

Au sein d'une fonction j'ai le code suivant:

[...]

// le proto fe G_Alloc
// void G_Alloc(int size);

bot_state_t *bs;

if (!botstates[client])
botstates[client] = G_Alloc(sizeof(bot_state_t));

bs = botstates[client];

[...]

lors de la compilation j'obtiens le message d'erreur suivant:

error C2440: '=' : cannot convert from 'void *' to 'bot_state_t *'
Conversion from 'void*' to pointer to non-'void' requires an
explicit cast

J'utilise donc reinterpret_cast (pointeur sur un pointeur d'un autre
type si je ne me trompe pas) j'écris donc le code suivant:

[...]

bot_state_t *bs;

if (!botstates[client])
botstates[client] =
G_Alloc(sizeof(reinterpret_cast<int*>(bot_state_t))); // je suis sur de
me tromper dans l'écriture...

bs = botstates[client];

[...]


et là j'obtiens ce message d'erreur:

error C2226: syntax error : unexpected type 'bot_state_t'

Je me demande si vous pouvez m'éclairer sur ces convertions C/C++,
pourquoi le compilateur en a t'il besoin ?

Je vous remercie.

Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Sep 22, 2004 2:51 am    Post subject: Re: Reinterpret_cast ? Reply with quote



On Wed, 22 Sep 2004 04:33:43 +0200, Olivier Bruckner
<bruckner.olivier (AT) tiscali (DOT) fr>:

Quote:
G_Alloc(sizeof(reinterpret_cast<int*>(bot_state_t)));

// je suis sur de me tromper dans l'écriture...

Je confirme.

reinterpret_cast<int*>(G_Alloc(sizeof(bot_state_t)));

--
;-)

Back to top
mmm
Guest





PostPosted: Wed Sep 22, 2004 3:57 am    Post subject: Re: Reinterpret_cast ? Reply with quote



ou plus simple:
botstates[client] = (bot_state_t*)G_Alloc(sizeof(bot_state_t));
(je suis un feignant Wink et j'aime pas les machin_cast Smile )

"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:04q1l050og45lo84p2gfekcuvf2p74eq6d (AT) 4ax (DOT) com...
Quote:
On Wed, 22 Sep 2004 04:33:43 +0200, Olivier Bruckner
[email]bruckner.olivier (AT) tiscali (DOT) fr[/email]>:

G_Alloc(sizeof(reinterpret_cast<int*>(bot_state_t)));

// je suis sur de me tromper dans l'écriture...

Je confirme.

reinterpret_cast<int*>(G_Alloc(sizeof(bot_state_t)));

--
Wink



Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Sep 22, 2004 5:48 am    Post subject: Re: Reinterpret_cast ? Reply with quote

On Wed, 22 Sep 2004 05:57:34 +0200, "mmm" <mmm (AT) devbooster (DOT) com>:

Quote:
et j'aime pas les machin_cast

Hum... Ce genre de réflexions en C++, avec en plus une réponse à
l'envers... ça s'appelle un troll, c'est bien ça ?
Dire que l'espace d'un instant, j'ai failli y tomber :-/


--
;-)

Back to top
mmm
Guest





PostPosted: Wed Sep 22, 2004 5:58 am    Post subject: Re: Reinterpret_cast ? Reply with quote

Intelligent...
Réponse à l'envers? précise mon ami

Pas mal pour une première tentative de participation à ce forum... je suis
ravi...

"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:ve42l0l4s6pgb1m4ujqdrbeul72nc18ash (AT) 4ax (DOT) com...
Quote:
On Wed, 22 Sep 2004 05:57:34 +0200, "mmm" <mmm (AT) devbooster (DOT) com>:

et j'aime pas les machin_cast

Hum... Ce genre de réflexions en C++, avec en plus une réponse à
l'envers... ça s'appelle un troll, c'est bien ça ?
Dire que l'espace d'un instant, j'ai failli y tomber :-/


--
Wink



Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Sep 22, 2004 6:10 am    Post subject: Re: Reinterpret_cast ? Reply with quote

http://www.giromini.org/usenet-fr/repondre.html

--
Wink
Back to top
Horst Kraemer
Guest





PostPosted: Wed Sep 22, 2004 6:19 am    Post subject: Re: Reinterpret_cast ? Reply with quote

Olivier Bruckner <bruckner.olivier (AT) tiscali (DOT) fr> wrote:

Quote:
Bonjour,

Je souhaites rendre du code écris en C, compilable par un compilateur
C++ (VC++ 2003).

Au sein d'une fonction j'ai le code suivant:

[...]

// le proto fe G_Alloc
// void G_Alloc(int size);

Probablement

void * G_Alloc(int size);

pourquoi ne pas copier le texte littéral ?


Quote:
bot_state_t *bs;

if (!botstates[client])
botstates[client] = G_Alloc(sizeof(bot_state_t));

botstates[client] =
(bot_state_t*)G_Alloc(sizeof(bot_state_t));

ou bien

botstates[client] =
static_cast<bot_state_t*>(G_Alloc(sizeof(bot_state_t)));


Quote:
bs = botstates[client];

[...]

--
Horst

--
Lâche pas la patate!

Back to top
Loïc Joly
Guest





PostPosted: Wed Sep 22, 2004 6:37 am    Post subject: Re: Reinterpret_cast ? Reply with quote

mmm wrote:

Quote:
ou plus simple:
botstates[client] = (bot_state_t*)G_Alloc(sizeof(bot_state_t));
(je suis un feignant Wink

Moi ausi, comme tout bon développeur

Quote:
et j'aime pas les machin_cast Smile )

Pas moi. On peut objectivement trouver des avantages aux machin_cast,
comme par exemple le fait de mieux discerner de quel type de cast il
s'agit, le fait de permettre des choses que les anciens casts ne
permettent pas d'écrire, le fait d'être plus facilement grepables, soit
par un outil informatique, soit quand on parcours le code.

Peux-tu expliquer quels avantages tu vois aux anciens casts ?

--
Loïc

Back to top
mmm
Guest





PostPosted: Wed Sep 22, 2004 6:41 am    Post subject: Re: Reinterpret_cast ? Reply with quote

"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> wrote:
Quote:
[...] en plus une réponse à l'envers...[...]

http://www.giromini.org/usenet-fr/repondre.html

--
Wink

Euh... merci Smile ... je recommencerai plus Wink
Côté usenet je suis un newbie, veuillez m'en excuser.



Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Sep 22, 2004 6:57 am    Post subject: Re: Reinterpret_cast ? Reply with quote

On Wed, 22 Sep 2004 08:41:15 +0200, "mmm" <mmm (AT) devbooster (DOT) com>:

Quote:
Côté usenet je suis un newbie

Dans ce cas, j'en profite aussi pour te filer l'URL de la FAQ, au cas
où tu l'aurais ratée :
http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/

--
;-)

Back to top
mmm
Guest





PostPosted: Wed Sep 22, 2004 8:38 am    Post subject: Re: Reinterpret_cast ? Reply with quote

"Loïc Joly" wrote:
Quote:

et j'aime pas les machin_cast Smile )

Pas moi. On peut objectivement trouver des avantages aux machin_cast,
comme par exemple le fait de mieux discerner de quel type de cast il
s'agit, le fait de permettre des choses que les anciens casts ne
permettent pas d'écrire, le fait d'être plus facilement grepables, soit
par un outil informatique, soit quand on parcours le code.

Peux-tu expliquer quels avantages tu vois aux anciens casts ?

J'aurai pt etre même du commencer par ça Wink, déjà je dois avouer une chose,
j'ai commencé par le C, et je n'ai passé que qq petits jours à essayer les
...._cast(Smile) mais j'ai désormais une bonne experience en C++, et mon boulot
consiste essentiellement ds le dev de lib c++, et outils de dev divers.
Je m'explique pr les casts:

Dans un contexte de dev où les exceptions c++ sont utilisées
systématiquement en tant que système de gestion d'erreur global (erreurs
systèmes aussi bien qu'erreurs utilisateurs, la moindre fct peut renvoyer
une exception ou presque y compris les ctor d'objets, ...), où le multi
threading est lui aussi omniprésent, où les composants utilisés par l'appli
peuvent être déchargé, mis à jour à chaud, ... en gros où quasi rien n'est
linéaire, où la durée de vie des objets manipulés n'est garantissable qu'a
l'aide entre autre d'un système de ref count, où tout ou presque est
modulaire, ... pr moi le rève Smile:
Les mécanismes du type dynamic_cast<type> sont de peux d'utilité, autant se
faire ses propres templates en utilisant une technique simili com (addref,
release, queryinterface, ... pointeurs observer<>, addrefer<>, ...) y
compris pour les objets sans ref count (getinterface) qui balance des
exceptions en cas de pb.

Les cast C je ne les utilise principalement que pour caster de void* <->
type* et en règle général quand je veux blouser le compilo mais j'évite
grave, il y a quelque rares cas(pr moi) où static_cast peut se réveler
indispensable (ex: cast d'une interface particulière/héritage multiple
basique d'une classe vers un truc style void** pr pas que le compilo
s'emmèle les pédales, le seul endroit où j'utilise ce type de cast).
Et l'intérêt du reinterpret_cast j'en vois pas, si ce n'est ce que tu
disais, le côté "grepable", qui peut être effectivement important, mais les
cast C à condition d'être "propre" peuvent l'être aussi (bon par type Smile
mais perso j'ai jamais eu à faire ça et c'est plus du à des carrences de nos
env de dev).
Les cast C sont, par contre relativement dangereux, et lorsqu'un peu plus de
contrôle serait bienvenu, les cast c++ ne me paraissent pas à la hauteur de
la tâche (ex: si en plus de la longueur de la syntaxe, je dois me taper le
test du retour pour balancer une exception au cas où la classe demandée
n'est pasdispo, ben je préfère refaire le truc...Wink ) .
En ce qui concerne la lisibilité, ayant une longue experience des languages
type syntaxe C, j'aime pas trop les languages trop littéraux (type vb,
cobol, pascal...), question de goût ou d'habitude, j'ai du coup plus de mal
à lire un truc du style reinterpret_cast<int*>(arg) que ça: (int*)arg.

En gros, pr moi l'idée est bonne, mais ça en fait trop peu, et ce serait
surtout intéressant si l'héritage multiple, le vrai (pas celui qu'avec une
classe de base et plein d'interface: ça c'était facile à gérer) marchait...
Si le c++ offrait un peu plus de possibilité pour le rendre un peu moins
statique (style: rtti améliorés permettant d'énumérer les membres d'une
instance de classe, ..., etc...) Pr moi ça fait parti des quelques pans du
C++ qui malheureusement ne sont pas terminés et sont à priori pas prêt de
l'être vu l'évolution de la norme, à quand le D++ ? :-)

Dans le même ordre d'idée j'ai banni l'utilisation des infos rtti de mes
sources, après avoir vu les faibles possibilités que ça offrait et que ça ne
me permettait pas de me passer ni même de simplifier mon propre système
d'info dynamique (class factory, publication de c++ pr du scripting, ...).

La question pr moi finalement ce serait plutôt: Quels avantages apportent
réellement les nouveaux cast, les infos rtti par rapport aux cast C, aux
"rtti à la mimine" dans le cadre des possibilités que nous offre aujourd'hui
nos machines, de l'évolution du dev en général, vu de ma lorgnette, où l'on
a de plus en plus besoin à la fois de dynamicité et de staticité (ex:
scripting embarqué ds une appli de gestion, avec pq pas un système de
plugins bdd, support d'images, modules métiers fournis par des boites
externes, ...) ?.

Voili, allez au boulot feignant ! (prenez le pas mal: je parle pr moi Smile)




Back to top
Arnaud Meurgues
Guest





PostPosted: Wed Sep 22, 2004 9:21 am    Post subject: Re: Reinterpret_cast ? Reply with quote

Fabien LE LEZ wrote:

Quote:
reinterpret_cast<int*>(G_Alloc(sizeof(bot_state_t)));

Pourquoi pas simplement un static_cast ?

--
Arnaud
(Supprimez les geneurs pour me répondre)

Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Sep 22, 2004 11:29 am    Post subject: Re: Reinterpret_cast ? Reply with quote

On Wed, 22 Sep 2004 11:21:47 +0200, Arnaud Meurgues
<arnaud (AT) meurgues (DOT) non.fr.invalid>:

Quote:
Pourquoi pas simplement un static_cast ?

Parce que la question portait sur l'emplacement du cast, pas son type.

--
;-)

Back to top
Gabriel Dos Reis
Guest





PostPosted: Wed Sep 22, 2004 12:00 pm    Post subject: Re: Reinterpret_cast ? Reply with quote

"mmm" <mmm (AT) devbooster (DOT) com> writes:

Quote:
Les mécanismes du type dynamic_cast<type> sont de peux d'utilité, autant se
faire ses propres templates en utilisant une technique simili com (addref,
release, queryinterface, ... pointeurs observer<>, addrefer<>, ...) y
compris pour les objets sans ref count (getinterface) qui balance des
exceptions en cas de pb.

Les cast C je ne les utilise principalement que pour caster de void* <-
type* et en règle général quand je veux blouser le compilo mais j'évite
grave, il y a quelque rares cas(pr moi) où static_cast peut se réveler
indispensable (ex: cast d'une interface particulière/héritage multiple
basique d'une classe vers un truc style void** pr pas que le compilo
s'emmèle les pédales, le seul endroit où j'utilise ce type de cast).
Et l'intérêt du reinterpret_cast j'en vois pas, si ce n'est ce que tu
disais, le côté "grepable", qui peut être effectivement important, mais les
cast C à condition d'être "propre" peuvent l'être aussi (bon par type Smile
mais perso j'ai jamais eu à faire ça et c'est plus du à des carrences de nos
env de dev).
Les cast C sont, par contre relativement dangereux, et lorsqu'un peu plus de
contrôle serait bienvenu, les cast c++ ne me paraissent pas à la hauteur de
la tâche (ex: si en plus de la longueur de la syntaxe, je dois me taper le
test du retour pour balancer une exception au cas où la classe demandée
n'est pasdispo, ben je préfère refaire le truc...Wink ) .

Groumph.

Consulte la liste des bouquins de la FAQ ; prends-en un ; étudie-le
sérieusement. Et essaie d'en retenir quelque chose.

-- Gaby

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu Sep 23, 2004 6:28 am    Post subject: Re: Reinterpret_cast ? Reply with quote

Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote

Quote:
On Wed, 22 Sep 2004 04:33:43 +0200, Olivier Bruckner
[email]bruckner.olivier (AT) tiscali (DOT) fr[/email]>:

G_Alloc(sizeof(reinterpret_cast<int*>(bot_state_t)));

// je suis sur de me tromper dans l'écriture...

Je confirme.

reinterpret_cast<int*>(G_Alloc(sizeof(bot_state_t)));

Pourquoi reinterpret_cast, et non static_cast ?

(À vrai dire, moi, j'aurais démandé pourquoi G_Alloc et al, plutôt que
std::vector ?)

--
James Kanze GABI Software http://www.gabi-soft.fr
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
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.