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

D Discussion :

D et la reflexion


Sujet :

D

  1. #1
    Membre à l'essai
    Homme Profil pro
    amehat
    Inscrit en
    août 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : amehat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2008
    Messages : 19
    Points : 24
    Points
    24
    Par défaut D et la reflexion
    Bonjour à tous,

    je suis en train de travailler sur le portage d'une librairie java en D, et je coince sur une classe parce qu'elle travaille avec de la reflexion.

    De ce que j'ai lu sur prowiki (http://www.prowiki.org/wiki4d/wiki.cgi?LanguagesVersusD), D ne sait pas faire de réflexion , il se limite à faire du Run-time type information (RTTI) (http://dlang.org/traits.html) .

    Voici le morceau de code qui me bloque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    static {
            Class clazz = this.class;
     
            auto accessible2Args = new Callback(clazz, "accessibleProc", 2);
            auto proc2Args = accessible2Args.getAddress();
            if (proc2Args === 0) {
    		(...)
    	}
    (...)
    }
    Je cherche une solution de contournement que je n'ai pas trouvé pour le moment.
    Si quelqu'un à une idée sur le sujet, je suis preneur.

    Merci à vous.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 904
    Points : 207 401
    Points
    207 401
    Billets dans le blog
    85
    Par défaut
    Bonjour,

    Pourquoi ne pouvez-vous pas utiliser un template ou de l'héritage pour contourner le besoin de réflexion ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Homme Profil pro
    amehat
    Inscrit en
    août 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : amehat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2008
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    je ne vois pas trop comment fonctionner avec de l'héritage sur une méthode dans le cas présent.

    En revanche, pour avoir posé la question sur dlang.org aussi, le template semble en effet être une solution.
    Paulo Pinto m'a conseillé ceci qui fonctionne dans mon cas :

    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
    import std.traits;
    import std.stdio;
     
    class test
    {
    	void accessibleProc () {}
    }
     
    void main ()
    {
    	auto t = new test();
    	alias MemberFunctionsTuple!(test, "accessibleProc") accessible2Args;
        if (accessible2Args.length == 1)
    	{
    		// accessibleProc address in accessible2Args[0]
    	}
    }
    Adam D.Rupper m'a conseillé aussi le code suivant :

    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
    alias helper(alias A) = A; // just to shorten things later
     
    foreach(memberName; __traits(allMembers, YourClass)) {
        alias member = helper!(__traits(getMember, YourClass, 
    memberName));
        static if(is(member == function)) {
             import std.traits;
             ParameterTypeTuple!member args;
             static if(args.length == 2) {
                    // found one
                   if(memberName == "accessibleProc") {
                       // you can check the name too
                   }
             }
        }
    }
    En tout cas, ça a résolu mon problème.

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

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