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 :

Reflexion en C++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par d�faut Reflexion en C++
    Bonjour,
    Y aurait il un truc en C++ qui me permet de faire la reflexion?? C'est a dire �tant donn� un objet o, et des NOMS de champs et m�thodes en chaines de caracteres, Est ce qu'on peut appliquer ces methodes sur cet objet o et tirer aussi les valeurs des attributs donn� en chaine de caractere de cet objet aussi??
    Plus precisement:
    j ai une classe point avec deux attribut x et y et une methode translater...
    j'ai les variables string suivantes:s1='x' et s2='y' et s3="translater". L'objet point �tant cr�� p. Comment faire p.x et et p.y et p.translater????

    Je sais qu'en C# ca existe, mais j'en ai besoin de �a en C++... Merci d'avance.

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par d�faut
    Sans avoir plus regarder cela, il existe un projet OpenC++ qui permet de parser un code C++ et qui (A VERIFIER) pourrait eventuellement permettre d'automatiser des mecanismes de reflexion (creer de methodes automatiquement, qui par exemple prennent en parametre une chaine et modifie les c=valeurs)

    Sinon, tu peux eventuellement passer par un bind type (lua ou python) pour pouvoir appeler des methodes C++ a partir de chaines de caracteres ...

    Note : ces deux propositions sont loin d etre triviale (quoi qu'un bind lua ce fait rapidement avec tolua++) . bon courage

  3. #3
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par d�faut
    note : il n existe pas de methodes "builtin" pour faire de la reflexion en C++

  4. #4
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par d�faut
    Citation Envoy� par smashy
    Sans avoir plus regarder cela, il existe un projet OpenC++ qui permet de parser un code C++ et qui (A VERIFIER) pourrait eventuellement permettre d'automatiser des mecanismes de reflexion (creer de methodes automatiquement, qui par exemple prennent en parametre une chaine et modifie les c=valeurs)
    Pourrais tu m'indiquer o� puis je trouver ce pojet OpenC++ qui me permet de faire la reflexion

    Citation Envoy� par smashy
    Sinon, tu peux eventuellement passer par un bind type (lua ou python) pour pouvoir appeler des methodes C++ a partir de chaines de caracteres ...

    Note : ces deux propositions sont loin d etre triviale (quoi qu'un bind lua ce fait rapidement avec tolua++) . bon courage
    Sinon la deuxieme solution ca me f� peur car ca va me prendre surement un temps fous pour se familiariser avec le nouvo langage et d'installer l'environnement appropri� et de pouvoir faire l'integration sacahant que j'ai pas trop le temps pour ce faire...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 54
    Par d�faut
    si t'as bien declar� ta classe genre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    classe point
    {
    private:
    int x;
    int y;
     
    public:
    point();
    point translater(-parametres de translater-);
    };
    dans le fichier "point.h"
    et dans le "point.cpp" :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     point point::translater(-parametres de translater-){
     
    définition
    }
    lorsque dans le main(), tu declares genre
    point p;
    p.x= 4; p.y=58; point P4 = p.translater(x,y);

    ca doit marcher normalement

    ps : le "::" est appel� op�rateur de r�solution


  6. #6
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par d�faut
    Citation Envoy� par marc_calagac
    si t'as bien declar� ta classe genre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    classe point
    {
    private:
    int x;
    int y;
     
    public:
    point();
    point translater(-parametres de translater-);
    };
    dans le fichier "point.h"
    et dans le "point.cpp" :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     point point::translater(-parametres de translater-){
     
    définition
    }
    lorsque dans le main(), tu declares genre
    point p;
    p.x= 4; p.y=58; point P4 = p.translater(x,y);

    ca doit marcher normalement

    ps : le "::" est appel� op�rateur de r�solution

    C'est que tu m'as pas bien compris... voila ce ke je veux: �tant donn� un string s, alors comment recup�rer la valeur du champ de p indiqu� par s, c'est a dire si s contient la valeur 'x' je doit avoir p.x, et si elle contient 'y' je veux p.y, autrement si s contient "translater" je veux appliquer la methode translater sur p etc....

  7. #7
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par d�faut
    http://www.codeproject.com/library/opencxx.asp

    sinon pour lua , c est un langage de script plutot simple, et il existe des programme (tolua++) pour automatiser la generation de code de bind.

    Il existe meme un livre (dont je n ai plus le nom sur moi) tres simple et peu epais pour apprendre a s en servir
    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
     
    class machin { // tolua_export
     
    public:
     
      // tolua_begin
     
      void f();
     
     // tolua_end
     
     
    private:
     
      int i
    }; // tolua_export

    tolua ++ va te permettre a partir d un header un peu modifie d accede dans lua a ton code C++

  8. #8
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    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 299
    Billets dans le blog
    2
    Par d�faut
    Bonjour bouzaidi,

    je suis peut-�tre un peu fatigu�, mais l'�nonc� de ton probl�me ne me semble pas tr�s clair.

    D�j�, j'ai l'impression que tu te fourfoie sur la notion de r�flexion de code. La r�flexion de code consiste � r�cup�rer des donn�es (m�ta donn�es) dans du code compil�. Je ne vois pas o� est le code compil� dans ton probl�me.

    Ensuite, tu �cris:
    �tant donn� un string s, alors comment recup�rer la valeur du champ de p indiqu� par s
    . si l'on admet que p est une instance de la classe Point, comment est d�finie cette classe Point?
    . quelle forme prend s?

    Pourrais-tu donner quelques pr�cisions car l�, je ne vois pas du tout ce que tu cherches � faire.

  9. #9
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    33
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par d�faut appeler une fonction a partir d'une chaine de caracteres
    Bonjour, je pense avoir la meme preoccupation;
    Si c'est le meme probleme, ca aidera peut etre a comprendre...

    Je recois un message en string ou en char*, je l'analyse pour en tirer un nom d'une fonction, et des eventuels parametres.
    Par exemple je recup�re le nom function1 et le param�tre int 128.
    J'ai alors tout ce qu'il me faut pour appeler la fonction function1(128); mais il reste le probl�me que c'est une chaine de caract�res. Donc je cherche quelque chose qui me permettra a partir de cette chaine a appeler une fonction (biensur predefinie)

    Je pense que ca rejoint la question de bouzaidi...
    Si qqn a une reponse a ce topic, ce serait d'une grande aide

  10. #10
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par d�faut
    OOOOh Xorgnem on est dans le meme train... C'est exactement ma problematique, je recupere depuis une BD un nom de methode function1 qui est bien sur en string ou en char*, ainsi ke les parametres mais comment l'appeler c'est ce qui me tue....
    J'espere ke l� c est bien explik� l��

  11. #11
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    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 299
    Billets dans le blog
    2
    Par d�faut
    Je comprends mieux le probl�me.
    A mon humble avis, �tant donn� que vous connaissez � l'avance quelles sont les fonctions qui sont susceptibles d'�tre appel� (n'est-ce pas?) une simple map de pointeurs de fontions (index� par leurs noms) devrait suffire.

  12. #12
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par d�faut
    Citation Envoy� par r0d
    Je comprends mieux le probl�me.
    A mon humble avis, �tant donn� que vous connaissez � l'avance quelles sont les fonctions qui sont susceptibles d'�tre appel� (n'est-ce pas?) une simple map de pointeurs de fontions (index� par leurs noms) devrait suffire.
    En ce qui me concerne j'ai plein de fonctions qui sont suceptibles d'etre appel�es, et je ne peux etudier tous les cas possible (c'est possible mais c'est couteux je crois)... c'est pour ca que j'aimerais bien pouvoir n'importe quelle fonction a partir de son nom.

    J'ai entendu parler de RTTI!!!!! mais j'en connais pas trop, snon r0d tu peux me preciser le truc de map que t'as propos�. Merci par avance

  13. #13
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Le probl�me n'est pas seulement de conna�tre les fonctions, il faut �galement savoir comment les appeler: Si elles n'ont pas toutes le m�me prototype, �a ne sera pas �vident de les appeler...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    33
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par d�faut
    Pour ce qui est de mon probleme, a l'heure actuelle, je ne connais pas les fonctions qui seront implementees et c'est pas moi qui vais le faire. (et elles sont peut �tre nombreuses)
    Ca me parait difficile, mais je reste interess� par une petite explication de comment on fait, au cas ou que ca suffirait, si je mets d'accord avec ceux qui bossent sur les fonctions � implementer.
    Merci!

    Le but du projet est d'envoyer des messages string totalement generiques par ethernet sur un systeme embarqu� (sous win CE) pour executer des fonctions et ainsi les tester.

  15. #15
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    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 299
    Billets dans le blog
    2
    Par d�faut
    Citation Envoy� par Xorgnem
    Pour ce qui est de mon probleme, a l'heure actuelle, je ne connais pas les fonctions qui seront implementees et c'est pas moi qui vais le faire. (et elles sont peut �tre nombreuses)
    Ca me parait difficile, mais je reste interess� par une petite explication de comment on fait, au cas ou que ca suffirait, si je mets d'accord avec ceux qui bossent sur les fonctions � implementer.
    Merci!

    Le but du projet est d'envoyer des messages string totalement generiques par ethernet sur un systeme embarqu� (sous win CE) pour executer des fonctions et ainsi les tester.
    Pour un truc comme �a, je pense que gSoap devrait convenir.

  16. #16
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    33
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par d�faut
    Citation Envoy� par r0d
    Pour un truc comme �a, je pense que gSoap devrait convenir.
    Mais si j'ai bien compris gSoap est un logiciel mac...
    Moi je dois ameliorer tout un systeme de test de matos deja existant. Il me faut donc une fonction C++ a ajouter au monstre existant

  17. #17
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Xorgnem, bouzaidi : Vous �tes la m�me personne ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Citation Envoy� par bouzaidi
    Bonjour,
    Y aurait il un truc en C++ qui me permet de faire la reflexion?? C'est a dire �tant donn� un objet o, et des NOMS de champs et m�thodes en chaines de caracteres, Est ce qu'on peut appliquer ces methodes sur cet objet o et tirer aussi les valeurs des attributs donn� en chaine de caractere de cet objet aussi??
    Plus precisement:
    j ai une classe point avec deux attribut x et y et une methode translater...
    j'ai les variables string suivantes:s1='x' et s2='y' et s3="translater". L'objet point �tant cr�� p. Comment faire p.x et et p.y et p.translater????

    Je sais qu'en C# ca existe, mais j'en ai besoin de �a en C++... Merci d'avance.
    Ca n'existe pas en C++ natif, ce n'est pas possible.

Discussions similaires

  1. [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
  2. [d�bat] Reflexion sur � quel langage ?�
    Par jack69 dans le forum Langages de programmation
    R�ponses: 8
    Dernier message: 23/05/2005, 08h30

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