Poster une réponse à un sujet: Typecasting "automatique" en C++
Attention, ce sujet est un sujet ancien (6294 jours sans réponse)
Gras [b]Texte[/b] Italique [i]Italique[/i] Souligné [u]Souligné[/u] Barré [strike]Barré[/strike]
Courriel [email=nobody@nobody.org]Nom[/email] Lien [url=http://www.website.com]Texte[/url] Ancre [anchor]Nom[/anchor] Image [img]http://www.website.com/image.jpg[/img] Insérer une image en provenance du site
Aligné à gauche [align=left]Texte[/align] Centré [align=center]Texte[/align] Aligné à droite [align=right]Texte[/align] Toute la largeur [align=justify]Texte[/text]
Couleur [color=#000000]Text[/color] Mise en forme [highlight=pascal]Texte[/highlight] Widgets Emoticons :code: [:code] Convertisseur HTML vers BBCode Convertisseur Word vers BBCode
Prévisualisation Vérification de l'orthographe

Copier Coller Couper Tout sélectionner
Tout effacer Insérer la date Insérer l'heure Insérer la date et heure Insérer votre IP
Liste [list=square][item]BlaBla[/item][/list] Liste Numérotée [list=decimal][item]BlaBla[/item][/list]
Citation [quote=name]Texte[/quote] Spoiler [spoiler]James est le meurtrier![/spoiler]
Tout en majuscules [uppercase]Texte[/uppercase] Tout en minuscules [lowercase]Texte[/lowercase] l33t [l33t]Je suis un nerd[/l33t] Texte en indice [sub]Texte[/sub] Texte en exposant [sup]Texte[/sup] Taille du texte [size=8]Texte[/size]
 
KangOl

Dans mon code, j'aimerais qu'une méthode du type:

A::DoSomething(String & a) ou A::DoSomething(String * a)

puis être utilisée comme suit:

A::DoSomething("Hello World");


Pour ça, il te faut

  1. A::DoSomething(String const & a)


Et oui la chaîne "Hello World" est constante :wink:
antp
Dans la MFC de Visual C++5 ils ont un opérateur LPCSTR permettant de combiner les char* avec les CString (CString::operator LPCSTR) mais je ne sais plus dans quel sens c'est (CString => char* ou l'inverse), et je ne sais plus comment ça marche.
En résumé, mon post ne sert peut-être à rien :grin:
rfr
il n'a pas fait de new -> au pire destrution automatique à la fin du bloque.


Oui mais non ... justement ... Je ne veux pas que l'objet soit détruit.

Quand tu passes une "chaine" comme paramètre d'une méthode, le compilateur alloue une fois pour toute la chaine dans l'exécutable. On est donc sûr qu'à chaque instant, la référence vers cette chaine reste valide, ou que l'on soit dans le flow d'éxecution du process.

Le comportement n'est pas le même s'il y a destruction automatique de l'objet.
kortenberg
il n'a pas fait de new -> au pire destrution automatique à la fin du bloque.
gizmo
Quand tu utilises String(x) tu ne dois pas te soucier de la désallocation.


Il n'utilise pas le String standard, donc on n'en sait rien.
kortenberg
Quand tu utilises String(x) tu ne dois pas te soucier de la désallocation.
rfr
Je crois que je vais devoir me tapper un truc du genre si je vous écoute bien ...

#define _S(x) String(x)
#define _PS(x) &String(x)

Ou pour éviter la création d'objets inutiles:

#define _S(x) StringManager::GetString(x)
#define _PS(x) StringManager::GetStringPtr(x)

Cette dernière solution ayant au moins l'intérêt de ne créer l'objet qu'une seule fois pour chaque string unique. Au cout, bien évidement, d'un lookup dans une hashtable.
Ca assure aussi qu'on considère l'objet crée comme +/- "statique" et que donc on ne se tracasse plus de son existence pour la désallocation.

Mais comme les strings fixes seraient de toute façon marginales, on ne pénalise pas trop les perfs.

Bon ok, c'est pas terribles les defines mais si ça me permet de m'en sortir pour le reste...
ovh
Je ne suis pas un gourou du C++ mais quand même j'ai eu des cours dessus et je l'ai pas mal utilisé (maintenant moins), et à ce que je me souvienne la solution pour ce type de cas c'est la surcharge de fonction, clairement :spamafote:
philfr
C++ n'est pas à typage dynamique, et les conversions implicites n'existent que pour les types numériques... :spamafote:

Je crains que la surcharge ne soit ton seul salut...

Ou alors appeler toujours explicitement (ce qui n'est pas moins lisible AMHA):

A::DoSomething(String("Hello World"));
zion
En gros, une bonne conversion automatique sans devoir chaque fois surcharger les methodes pour qu'elles acceptent les deux types


Ah oué flute...

Euh... Pascal est ton ami, sinon je laisse ma langue au chat :petrus:
Catégorie:  






Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?