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 :

Possible de lister dynamiquement les membres de classes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut Possible de lister dynamiquement les membres de classes
    Bonjour,
    J'ai des classes avec un nombre conséquent de membres (15-20). Je ne parle pas des fonctions membre.
    Est-il possible de lister ces membres pour en extraire leurs noms. Je veux la liste des noms de tous les membres d'une classe. Si oui comment ?

    Merci d'avance pour vos réponses.

  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
    J'ai des classes avec un nombre conséquent de membres (15-20).
    T'es sûr que t'as pas une erreur de conception ?

    Est-il possible de lister ces membres pour en extraire leurs noms.
    Pas à moins que tu exposes cette information par toi-même.
    Avec des macros simples, tu peux facilement transformer une structure en une séquence associative Boost.Fusion, qui te permettra de parcourir tes membres à la compilation (et donc aussi à l'exécution)

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut
    Merci pour ta reponse loufoque

    Non je n'ai pas de probleme de conception, j'ai pas le choix : le nombre de membre est lie a des proprietes physiques.

    Je ne connais pas boost, et ce que tu m'ennonce me semble complique a mettre en oeuvre. Qu'entends tu par macro simple ? A quoi ressemblerait ce genre de macro, je vois pas bien.

    A+

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Là où l'on commence à parler de "problème de conception", c'est quand la solution vers laquelle tu t'orientes commence à s'écarter (plus ou moins franchement) de la "conception orientée objet".

    En effet, l'idée de la conception orientée objet est que l'objet (pour faire simple: le type que tu crées) est sensé fournir un certains nombre de "services" (émettre ou recevoir un certain nombre de "messages") et indiquer éventuellement un certain nombre d'états.

    Cela implique que les données membres ne sont plus perçues que comme "ce qui va aider l'objet à rendre les services que l'on attend de lui" ou comme "ce qui va l'aider à déterminer l'état dans lequel il se trouve", le tout avec comme sous-entendu, la notion que l'objet arrivera à travailler de manière "cohérente"

    Partant de là, il est finalement assez simple de se dire que, effectivement, si tu ne sais pas si ton objet contient 15 ou 20 membres, et que tu en viens à devoir l'interroger sur ce fait, c'est que, quelque part, tu as sans doute mal défini les responsabilités de ton objet, et donc, que tu as sans doute effectivement un problème de conception à la base.

    Maintenant, il est toujours possible de réfléchir au fait que, pour pouvoir rendre les services que l'on attend de lui, l'objet doive maintenir une "collection" de valeurs (de type compatible) et que cette collection de valeur est susceptible de contenir un nombre d'éléments variant, dans ton cas, entre 15 et 20...

    Mais cela signifie que ton objet aura - en plus de tout le reste - la responsabilité de... gérer ces valeurs.

    C'est à dire que tu délèguera à ton objet le fait de rajouter, de supprimer ou de dire combien de valeurs se trouvent dans la collection.

    Sinon, ce que tu demande ressemble fortement à de l'introspection (dis moi ce que tu contient, je te dirai qui tu es), et, quand on en vient à souhaiter disposer de cette fonctionnalité, c'est que, "quelque part" on en vient à oublier le type d'objet que l'on manipule... ce qui ne devrait quand meme pas arriver
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Pourquoi veux-tu extraire ces membres? Pour de la doc? Pour te faciliter la vie en développant? Dynamiquement lors de l'exécution. La réponse à ta question peut varier en fonction de la réponse à celles-ci

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut
    Merci pour vos réponses


    Je n'ai effectivement pas expliqué en détail le but de ma question et je me suis certainement mal expliqué. Désolé. Je vais donc essayer de palier à cette lacune.
    Mes objets sont bien définis (quoique ... mon CDC est très sommaire) et ils ont un nombre de membres arrêté (pour l'instant). Mais effectivement mes classes vont certainement évoluées pour éventuellement rajouter des membres ou simplement pour modifier les intitulés de mes membres afin de les traduire correctement en anglais par exemple.

    Pourquoi je cherche à connaitre la liste de mes membres ? Parceque je suis en train d'écrire un dictionnaire de mots clés à utiliser lors de parsing XML.
    Je suis fénéant alors plutôt que de lister à la mimine les moultes membres de mes moultes classes, qui en plus ont de grandes chances d'être modifiées, j'avais pensé à cette solution qui me faciliterait grandement la vie. Cela voudrait dire que je pourait carrément me passer d'écrire un dictionnaire puisque les mots cléfs sont ni plus ni moins les nom de mes membres.

    Donc lors de mon parsing XML (à l'éxécution) je voudrais pouvoir faire une recherche d'attribut en bouclant sur ma liste de membre et en faisant les testes adéquat.

    Heu est ce que je suis clair là ?

  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
    Moi ce qui me choque c'est plus le fait qu'il y ait autant de membres.
    Typiquement par exemple, on modélise un vecteur par un type vecteur, une équation par un type équation, un polynome par un type polynome, une collection par un type qui convient, une matrice par un type matrice, un objet géométrique par un objet géométrique, etc.
    Le fait que tu aies autant de membres me fait penser que peut-être tu n'abstrais pas suffisamment et que tu te traînes dans la même structure tous les détails bas-niveau des choses que tu modélises, au lieu de combiner d'autres types.

    Enfin bref, puisqu'apparemment tu n'arrives pas à te documenter par toi-même sur la solution que j'ai proposée, voici un lien :
    http://www.boost.org/doc/libs/1_37_0...tml/index.html
    Après c'est sûrement pas la solution la plus adaptée, surtout si tu as du mal avec tout ce qui est templates et méta-programmation. Surtout qu'il faudrait travailler avec des clés étant des compile-time strings, et convertir tout ça de manière générique et automatisé en information à l'exécution.
    Peut-être qu'un truc comme ceci est déjà plus proche de ce que tu cherches.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2014, 11h59
  2. Lister dynamiquement les pages d'un site web
    Par daja dans le forum ASP.NET
    Réponses: 0
    Dernier message: 12/01/2012, 18h41
  3. lister tous les membres de tous les groupes AD
    Par fbb53 dans le forum VBScript
    Réponses: 1
    Dernier message: 03/10/2011, 11h24
  4. [VB.NET]Reflexion lister les membres d'une classe ...presque
    Par lucie.houel dans le forum ASP.NET
    Réponses: 19
    Dernier message: 20/09/2005, 13h49

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