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

BOUML Discussion :

[Bug] Reverse C++ et déclarations anticipées de classes "nested"


Sujet :

BOUML

  1. #1
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    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 287
    Par défaut [Bug] Reverse C++ et déclarations anticipées de classes "nested"
    Bonjour,

    Juste pour signaler un problème que j'ai constaté sur plusieurs classes lors d'un import: Si la classe contient une déclaration anticipée de classe embarquée (nested)(typiquement une classe pimpl), BOUML signale des erreurs de syntaxe. On retrouve le même problème lors de la définition de la classe dans le .cpp.
    ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namespace N {
    struct C {
        struct Pimpl;
        Pimpl * m_pimpl;
    };
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct N::C::Pimpl : noncopyable {
       ...
    };
    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...

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Bonsoir,

    en fait le reverse râle dans le cas d'un struct / union / enum, mais pas d'une classe, il accepte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namespace N {
    struct C {
        class Pimpl;
        Pimpl * m_pimpl;
    };
    }
    la forme "class Pimpl;" produisant un extra member qui est la seule façon de mémoriser la chose dans le modèle

    par contre cela se passe mal pour le reverse de
    car cela produit la classe N::C:: Pimpl, et m_pimpl n'est pas une relation car la classe Pimpl est vue comme absente.

    Il faut quand même dire que procéder ainsi est particulièrement tordu

    tout va bien par contre si la définition de Pimpl est faite dans C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    namespace N {
    struct C {
        class Pimpl {};
            
        Pimpl * m_pimpl;
    };
    }
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    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 287
    Par défaut
    Tordu ? Pas vraiment. C'est même une technique connue (sous trois noms différents -> pimpl idiom, compilation firewall, chesshire cat (celui-là, je ne sais jamais l'épeler)). Cf les GOTW 24 et 28: http://www.gotw.ca/gotw/024.htm et http://www.gotw.ca/gotw/028.htm

    Cela permet de tirer moins de dépendances dans les fichiers d'en-tête, d'avoir une encapsulation encore plus forte, et d'améliorer accessoirement les temps de compilation, au détriment de ceux à l'exécution.

    Bref, cette digression pour dire que cet idiome n'appartient pas à la catégorie des mauvaises pratiques, et qu'il n'est pas si rare qu'il soit employé: les écrits d'Herb Sutter dont GOTW et les bouquins qui en découlent, sont régulièrement évoqués sur la toile, et de fait cette technique "découverte".

    Concernant, le coup du struct qui n'est pas reconnu comme une classe, c'est dommage, mais bon à savoir. Merci.


    PS: je ne passe pas le sujet à résolu, je peux migrer le Bug en RfC ou RfE si tu préfères.
    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...

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    ce qui est tordu c'est que Pimpl est à la fois imbriquée et non imbriquée, cela pose un gros problème au niveau modélisation, ce qui n'aurait pas été le cas avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namespace N {
    class Pimpl;
    struct C {
        Pimpl * m_pimpl;
    };
    }
    PS: je ne passe pas le sujet à résolu, je peux migrer le Bug en RfC ou RfE si tu préfères.
    je ne sais pas ce que tu veux dire par RfC/RfE, mais puisqu'il n'y a toujours rien aujourd'hui sous forge à ce propos j'ai ouvert un ticket ...
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    avec la version 4.8.4 il n'y a plus d'erreur de syntaxe lors de la lecture d'une déclaration en avance d'un struct, union et enum
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    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 287
    Par défaut
    Merci.

    PS: RfC/E==Request for Change/Enhancements
    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...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déclaration anticipée d'une classe template
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 30/09/2012, 15h20
  2. Réponses: 2
    Dernier message: 21/04/2012, 12h26
  3. [Héritage] Déclaration d'une classe amie
    Par nihlstroem dans le forum Delphi
    Réponses: 3
    Dernier message: 11/08/2006, 16h57
  4. Séparer la définition et la déclaration d'une classe
    Par prgasp77 dans le forum Langage
    Réponses: 5
    Dernier message: 24/08/2005, 21h37

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