Partage
  • Partager sur Facebook
  • Partager sur Twitter

réflextion en C++

introspection d'objet

Sujet résolu
    14 juin 2007 à 16:14:49

    bonjour,
    voilà je pense que la bibliothèque standard en C++ ne permet pas de faire de l'introspection mais je me demandais si qqun parmis vous connaissait une api qui permettrais de faire cela.


    edit: Personne n'a de piste, ou sait que tout simplement ce n'est pas possible en c++ ?
    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2007 à 22:39:26

      Le problème à mon avis, comme il n'y a pas de classe racine en C++, c'est que chaque classe doit implémenter sa propre introspection. Je sais pas ce qu'on peut faire en C++ pour faire une introspection, alors je vais plutôt parler de ce que je sais déjà sur un autre langage : Objective-C.

      En Objective-C, tu as déjà l'introspection, chaque objet est capable de dire au runtime qui il est, cependant, cela nécessite que chaque objet ait une variable d'instance pointant sur un objet-classe et ça aussi ça implique d'avoir des objets classes. Chaque objet-classes contient la description de classe elle-même, c'est-à-dire de la taille de sa structure de donnée, des méthodes qui lui sont définis, la super-classe, etc.
      Mais le truc c'est quen C++ il n'y a pas de structure commune comme ça, donc chaque classe doit s'organiser pour arriver à dire à quoi elle ressemble, et à mon avis tu peux implémenter ça pour tes classes à toi mais tu arriveras difficilement à le faire pour tout...

      Donc ça doit être possible... Mais bon courage :D .
      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2007 à 23:12:18

        À grands coups de méta-programmation, il y a moyen d'obtenir un semblant d'introspection statique.

        Ce qui ne nous empêche pas de disposer de moyens permettant de faire des choses plus dynamiques (comme la sérialization) pouvant reposer sur l'introspection chez d'autres.

        D'autres fois, on va utiliser des outils externes qui vont générer du code.

        La vraie question : pourquoi faire tu voudrais de l'introspection ? Quel est le vrai problème que tu cherches à résoudre ?


        Sinon, des discussions pointues beaucoup plus précises dans les archives de developpez, clc++m, et probablement fclc++ aussi.
        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
          15 juin 2007 à 1:18:45

          tout d'abord merci de vos réponses.

          Citation : Pas de titre

          La vraie question : pourquoi faire tu voudrais de l'introspection ? Quel est le vrai problème que tu cherches à résoudre ?



          En fait, j'ai un projet écrit en java et j'aimerais bien le passer en c++, seulement voilà une des caractéristique les plus intéressante est qu'il charge des classes à l'éxécution (les objets sont créer et utiliser grace à la réflexion). Enfin je me doute bien qu'il est possible de faire les choses différemment mais il est toujours bon de ce renseigner.

          je vais donc me tourner vers d'autre solutions
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2007 à 23:14:48

            En C++ Ca me parait difficile. Seule façon c'est de créér une espèce d'interpréteur avec boost.spirit ou semblable, mais toujours est il que le C++ ne le permet pas vraiment à l'origine : il faut feinter comme on peut.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              16 juin 2007 à 11:38:37

              a coup de RTTI (typ_info) ?
              Par contre , cela impose que toutes tes classes dérivenets d'une même classe mêre.
              • Partager sur Facebook
              • Partager sur Twitter
                16 juin 2007 à 12:21:44

                Davidbrcz > cela te donnerait juste des noms de types, et non pas la possibilité d'intéragir avec la liste des attributs et fonctions membres d'une classe automatiquement.
                Dans le pire des cas, tu définis des macros qui enregistrent automatiquement ce que tu déclares dans la class dans un conteneur tout en déclarant ces derniers dans la classe. Et après tu disposes d'un conteneur associant un nom de class à tout ce qui est déclaré dedans. Cela peut suffir selon ce que tu veux faire.

                Edit : Avec Boost.Mpl et l'idée dont je parle, il y a franchement moyen de faire un semblant de réflexion.
                • Partager sur Facebook
                • Partager sur Twitter
                  17 juin 2007 à 23:44:40

                  Pour le problème de chargement dynamique de nouvelles choses.

                  Il y a moyen de faire des choses, mais en sortant des limites du standard pour regarder ce que permettent OS et compilo.

                  En gros, tu définis une interface pour dialoguer avec des choses pouvant être rajoutées à la volée, et ensuite tu compileras des bibliothèques dynamiques (dll/.so) qui exposeront des types spécialisés dérivant de l'interface définies. Ton programme principal devra s'assurer de charger ces bibliothèques dynamiques pour créer de nouvelles données des nouveaux types spécialisés.
                  -> on parle de plugins.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                  réflextion en C++

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown