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

MFC Discussion :

[Migration] Borland -> Visual


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Et J = I + I + F ?
    (-> rajouter les const qui manquent)
    Et si on écrivait
    J = (I + I) + F?
    l'operator+() additionne I et I et ensuite F et stocke à l'aide de operator=() dans J.

    Gabrielly

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 297
    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 297
    Par défaut
    Arf. Je n'avais pas fait attention à l'opérateur de convertion qui fait en sorte que I + J + K additionne des int et non leur proxies.
    Ce qui rejoint mon idée (non formulée) première que le proxy ne doit rien contenir d'autre que des indirections sur des set & get.

    Ces opérateurs mathématiques ne servent à rien.
    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...

  3. #3
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Luc Hermitte a écrit:
    Arf. Je n'avais pas fait attention à l'opérateur de convertion qui fait en sorte que I + J + K additionne des int et non leur proxies.
    Ce qui rejoint mon idée (non formulée) première que le proxy ne doit rien contenir d'autre que des indirections sur des set & get.

    Ces opérateurs mathématiques ne servent à rien.
    Aurelien.Regat-Barrel a écrit la classe en premier. Et j'étais content car j'avais la même idée celle de définir une classe template Property. Je l'ai juste perfectionné un peu avec suffisamment de méthodes d'opérateur surdéfinis pour permettre à 10_GOTO_10 à ne pas trop récrire tous son code. Et d'ailleurs Property recoit dans le contexte courant des types primitifs. Juste pour être plus prêts des besoins de 10_GOTO_10. Mais ces quelques postes sont intéressants car les solutions que l'on peut en tirer de C++ sont multiples ie les tiennent comme les miennes alors faisons simplement une union des solutions. Les opérateurs mathématiques simplifient la syntaxe, tu ne trouves pas? Les pointeurs intelligents les utilisent énormément (ATL). Ceux qui nous lisent veront combien la marge de manoeuvre de ce langage est grand.

    Gabrielly

  4. #4
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Merci à vous tous. Même si j'ai pas de solution parfaite, j'ai néanmoins pas mal progressé. Pour info, voici la solution que je pense adopter:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    const WORD PROPERTY_READVAR   = 0x0001;
    const WORD PROPERTY_READFONC  = 0x0002;
    const WORD PROPERTY_WRITEVAR  = 0x0004;
    const WORD PROPERTY_WRITEFONC = 0x0008;
     
    template<class O, typename T>
    class Property {
    private:
      O * Owner;
      WORD TypeInit;
      union {
        T * Read_t;
        T (O::* Get_t) ();
      };
      union {
        T * Write_t;
        bool (O::* Set_t) (const T t);
      };
    public: 
      Property() {
        Owner = NULL;
        TypeInit = 0;
        Read_t = NULL;
        Write_t = NULL;
      }
      void InitProperty(O * NewOwner, T * NewRead_t, T * NewWrite_t) {
        Owner = NewOwner;
        TypeInit = PROPERTY_READVAR | PROPERTY_WRITEVAR;
        Read_t = NewRead_t;
        Write_t = NewWrite_t;
      }
      void InitProperty(O * NewOwner, T (O::* NewGet_t) (), T * NewWrite_t) {
        Owner = NewOwner;
        TypeInit = PROPERTY_READFONC | PROPERTY_WRITEVAR;
        Write_t = NewWrite_t;
        Get_t = NewGet_t;
      }
      void InitProperty(O * NewOwner, T * NewRead_t, bool (O::* NewSet_t)  (const T t)) {
        Owner = NewOwner;
        TypeInit = PROPERTY_READVAR | PROPERTY_WRITEFONC;
        Read_t = NewRead_t;
        Set_t = NewSet_t;
      }
      void InitProperty(O * NewOwner, T (O::* NewGet_t) (), bool (O::* NewSet_t)  (const T t)) {
        Owner = NewOwner;
        TypeInit = PROPERTY_READFONC | PROPERTY_WRITEFONC;
        Get_t = NewGet_t;
        Set_t = NewSet_t;
      }
      operator T() {
        if (TypeInit & PROPERTY_READVAR) return * this->Read_t;
        if (TypeInit & PROPERTY_READFONC) return (Owner->*Get_t)();
        return 0;
      }
      T operator=( const T t ) {
        if (TypeInit & PROPERTY_WRITEVAR) * this->Write_t = t;
        if (TypeInit & PROPERTY_WRITEFONC) (Owner->*Set_t)(t);
        return T();
      }
    };

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class TMyClasse {
    private:
      int FMyAttr;
     
      int GetMyAttr();
      bool SetMyAttr(const int NewAttr);
     
    public:
      Property<TMyClasse, int> MyAttr;
    };
    Puis, dans le constructeur de MyClasse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyAttr.InitProperty(this, GetMyAttr, SetMyAttr);
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyAttr.InitProperty(this, &FMyAttr, &FMyAttr);

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 297
    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 297
    Par défaut
    Tu n'as pas été voir sur http://groups.yahoo.com/group/boost/files/ (s'inscrire à la ML pour accéder à cette zone). J'y vois 3 implémentations de la bête.
    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.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2010, 11h23
  2. Correspondance entre Borland et Visual Express
    Par garat dans le forum VC++ .NET
    Réponses: 0
    Dernier message: 23/02/2010, 22h05
  3. Nom des compilateurs Borland et Visual C++
    Par MaTtaW dans le forum C++
    Réponses: 3
    Dernier message: 19/05/2009, 11h47
  4. migration Borland 2006 à 2007
    Par roro_la_patate dans le forum C++
    Réponses: 0
    Dernier message: 06/05/2008, 19h24
  5. Migration VC++5 => Visual studio 2003
    Par Gnius dans le forum Visual C++
    Réponses: 6
    Dernier message: 13/11/2007, 09h32

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