IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

try/finally comment ajouter cette fonctionnalité au compilo


Sujet :

C++

  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut try/finally comment ajouter cette fonctionnalité au compilo
    Bonjour,

    J'essaye de migrer un logiciel coder sous VS2005 et utilisant le CLR en "Win32". Le code C++ est presque standard si ce n'est qu'il utilise des blocs try finally. Y-a-t'il moyen de faire en sorte que le compilo les supportent? Par exemple en ajoutant du code qui déclare ces blocs... je n'ai pas envie de modifier tout le code qui est relativement bien écrit!

    Je vous remercie par avance!

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il y a des techniques à base de macros il me semble. Voir du côté de Boost ou de Loki.

  3. #3
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Je viens de faire des recherches dans le code de boost et mis à part dans les fichiers token_ids.hpp et wave_config.hpp de Boost.Wave, je ne vois rien!

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Même avec des simples macros, cela me parait difficile à faire. Ce qui est dans le finally est toujours exécuté.

    J'imagine qu'adapter le code à des idiomes plus C++ (le RAII quoi) serait trop couteux en énergie ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Oui, je n'ai pas envie d'avoir à tout modifier!

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Tu pourrais peut-être tenter une réécriture de tes fichiers sources avec un outil comme Bison par exemple?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Citation Envoyé par Luc Hermitte
    Même avec des simples macros, cela me parait difficile à faire. Ce qui est dans le finally est toujours exécuté.
    Je ne vois pas ce qu'il y a de particulièrement difficile.
    Il suffit de générer un objet avec un destructeur qui fait le code voulu.

    Tu trouveras sûrement des trucs en cherchant BOOST_FINALLY sur les newsgroups de boost, et sinon il y a les ScopeGuard de Loki je crois.

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    ?? Comment tu définis une classe locale à une fonction? Comment tu l'initialises pour qu'elle s'approprie les ressources locales qu'elle devra libérer ?
    Avec juste une macro qui s'appelle TRY et sa copine FINALLY, ce n'est pas possible.

    Il faut réaliser des initialisations (dans le TRY) qui sont fonction des ressources qui seront libérées (chacune à sa façon) dans le FINALLY. Je ne vois même pas comment c'est possible de réaliser cela avec deux macros dépourvues de paramètres -- afin de respecter le 0 refactorisation.

    C'est au développeur de réfléchir pour tout encapsuler manuellement dans des ScopedGuard (vieil article du CUJ dispo depuis le site de l'auteur (Andrei Alexandrescu))
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    ?? Comment tu définis une classe locale à une fonction?
    Elle n'a pas besoin d'être locale, seule l'instance l'est.

    Comment tu l'initialises pour qu'elle s'approprie les ressources locales qu'elle devra libérer ?
    Il suffit que l'objet prenne une référence vers toutes les variables locales voulues.
    Il y a aussi la possibilité d'utiliser des closures...

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    OK, on ne parle pas de la même chose.
    Je suis d'accord que le RAII est la façon C++ de procéder, et qu'il ne trouvera pas d'autres solutions.

    Je disais, il n'y a (*) aucun moyen avec des macros de remplacer simplement les __try __finally propres à son outil. Il faut obligatoirement adapter le code (pour le migrer manuellement vers du RAII) pour obtenir les mêmes comportements.

    (*) du moins, je n'en vois pas.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/08/2014, 21h47
  2. Réponses: 7
    Dernier message: 11/05/2006, 09h30
  3. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  4. Comment ajouter un choix d'OS à LILO boot ???
    Par shkyo dans le forum Administration système
    Réponses: 7
    Dernier message: 19/04/2004, 15h20
  5. Réponses: 14
    Dernier message: 28/08/2003, 23h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo