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 :

Question sur les problèmes d'allocation dynamique


Sujet :

C++

  1. #21
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Ah... j'avais pas pensé à une fonction template, et je connaissais pas boost::bind. Du coup j'ai utilisé à contre coeur des macros. Surtout que je vois parfaitement où je pourrais caser ça. J'ai une classe error manager que j'utilise ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void MyDlg::buttonStartClicked()
    {
        TRY_EM( "MyDlg::buttonStartClicked()" )
            this->Model.Start();
        CATCH_EM
    }
    Ces macros valent en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #define TRY_EM( name ) \
        {\
        ErrorManager em( name ); \
        try \
        {\    
     
    #ifdef DEBUG
    #define CATCH_EM \
        }\
        catch ( const UserException & e )\
        {\
            em.Error( e );\
        }\
        }
    #else
    #define CATCH_EM \
        }\
        catch ( const UserException & e )\
        {\
            em.Error( e );\
        }\
        catch ( const InternalException & e )\
        {\
            em.Error( e );\
        }\
        catch ( const std::bad_alloc & e )\
        {\
            em.Error( e );\
        }\
        catch ( const std::exception & e )\
        {\
            em.Error( e );\
        }\
        catch ( ... )\
        {\
            em.CriticalError();\
        }\
        }
    #endif
    En debug seules les erreurs destinnéées à l'utilisateur sont traitées, le reste c'est des erreurs internes (assertion maison qui foire, division par zero, etc...) et je les traite pas pourque le debugger m'y emène.

    Avec un zoli template, ca deviendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void MyDlg::buttonStartClicked()
    {
        ErrorManager em( "MyDlg::buttonStartClicked()" );
        em.SafeCall(
            this->Model.Start );
    }
    8)

  2. #22
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Si tu appelles toujours exactement "em.Error(e);", et que la fonction n'a pas été surchargée, alors il est encore plus simple de faire dériver tout le monde de std::exception.

    Sinon, j'ai au contraire encore plus d'exceptions à afficher en mode debug. J'utilise des smart-assertions, inspirées de l'article d'Andrei Alexandrescu, qui peuvent lever des exceptions.

    PS: pour boost::bind, je n'ai pas vérifier mais il me semble que l'écriture que j'ai utilisée définit un foncteur qui sera évalué en "obj.fn(p1,p2);" -- j'ai un doute dans l'ordre des paramètres.

  3. #23
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Luc Hermitte
    Si tu appelles toujours exactement "em.Error(e);", et que la fonction n'a pas été surchargée, alors il est encore plus simple de faire dériver tout le monde de std::exception.
    Elle est surchargée, et mes classes perso d'exception héritent de std::exception. Cependant elles me donnent plus d'infos : lieu de l'exception, parametre invalide, message d'aide pour l'utilisateur, etc...

    Citation Envoyé par Luc Hermitte
    Sinon, j'ai au contraire encore plus d'exceptions à afficher en mode debug. J'utilise des smart-assertions, inspirées de l'article d'Andrei Alexandrescu, qui peuvent lever des exceptions.
    Ben moi je les affiche pas. En ne les catchant pas, le debugger de VS me place à l'endroit exact où elle a lieu, je peux voir en live la valeur des variables, la pile des appels, etc...

  4. #24
    Membre habitué

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Points : 161
    Points
    161
    Par défaut
    Merci beaucoup pour les infos et les idées.
    Il va falloir que je me penche sur la librairie boost. Ca a l'air interessant.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Question sur les menus dans les pages HTML non dynamiques (sans PHP, ASP)
    Par o_r_a_x dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/05/2009, 16h16
  2. Question sur les vspace + problème commande
    Par Fox213 dans le forum Mise en forme
    Réponses: 6
    Dernier message: 08/10/2008, 21h06
  3. question sur les frames en dynamique
    Par jypees dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 11/12/2007, 14h08
  4. Question sur les bibliothques dynamiques
    Par inh40 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 11/04/2007, 15h16
  5. Réponses: 7
    Dernier message: 10/01/2007, 00h37

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