Poster une réponse à un sujet: Typecasting "automatique" en C++
    Attention, ce sujet est un sujet ancien (6278 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 ?