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 :

simple question sur operator<


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut simple question sur operator<
    Bonjour, j'utilise ce type dans un map en tant que clé et j'ai donc besoin de surcharger l'opérateur < :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class UID
    	{
    		sf::Uint32 Type;
    		sf::Uint32 ID;
     
    	public :
     
    		inline sf::Uint32 Get_Type(){return Type;}	
    		inline void Set_Type(sf::Uint32 k){Type = k;}
    		inline sf::Uint32 Get_ID(){return ID;}
    		inline void Set_ID(sf::Uint32 k){ID = k;}
    		bool operator<(UID i);
    	};
    mais quoi que je fasse je n'arrive pas a bien définir mon opérateur, voila ma dernière tentative...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    bool Engine::UID::operator <(Engine::UID i)
    {	
    	return ((this->Get_Type() < i.Get_Type() )&& (this->Get_ID() < i.Get_ID()));
    }
    J'ai essayé de beaucoup de manière différentes mais le compilateur (visual c++ 2005) n'arrive pas à faire correspondre apparemment.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Tout d'abord, un tel opérateur a souvent avantage a être décrit comme une fonction libre, et non comme une fonction membre. Ca permet d'être plus homogène entre les arguments en terme de conversion de données.

    Ensuite, un opérateur< valide doit répondre à certains critère, qui définissent ce qu'on appelle un strict weak ordering.
    http://www.developpez.net/forums/sho...2&postcount=11

    Dans ton cas, si on a comme couples {Type, Id} a = {0, 1} et b = {1, 0} c = {1, 2}, alors on a :
    - a n'est pas inférieur à b, b n'est pas inférieur à a => a et b sont équivalents ?
    - a<c, mais b pas inférieur à c, ce qui n'est pas possible si a et b sont équivalents...

    Généralement, pour chaînes les < de données membre, on fait plutôt du code style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (type1 == type2)
      return id1<id2
    else
      return type1<type2;
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Merci beaucoup pour ta réponse, je comprend bien ce qui ne va pas, mais en fait je m'étais dit que vu que chaque objet va être unique:
    - soit de même type mais ID différents forcément
    - soit de type différents et ID peut être égal

    ben logiquement il n'y a pas de confusion...

    Mais mon compilateur pense différemment lol, donc je sens que je vais être obligé d'affecter un ID global, ou alors autre chose...

    C'est vraiment bizarre qu'un prédicat aussi simple ne soit pas accepté...

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Champignon_atomik Voir le message
    Merci beaucoup pour ta réponse, je comprend bien ce qui ne va pas, mais en fait je m'étais dit que vu que chaque objet va être unique:
    - soit de même type mais ID différents forcément
    - soit de type différents et ID peut être égal

    ben logiquement il n'y a pas de confusion...
    Dans l'exemple que j'ai donné avec a, b et c, il n'y a pas deux ids ni deux types identiques, pourtant il y a bien problème.

    Citation Envoyé par Champignon_atomik Voir le message
    Mais mon compilateur pense différemment lol, donc je sens que je vais être obligé d'affecter un ID global, ou alors autre chose...
    Qu'est ce qui ne te plais pas dans ma proposition ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    En fait je viens de trouver l'erreur, j'ai mis une fonction amie et ça marche super bien donc plus besoin de se casser la tête merci de ton aide .

    (D'ailleurs tu m'avais conseillé de faire ça au début)

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

Discussions similaires

  1. Simple question sur les pointeurs
    Par Clad3 dans le forum C++
    Réponses: 9
    Dernier message: 29/06/2006, 01h05
  2. question sur operator>>
    Par LaseLiep dans le forum C++
    Réponses: 4
    Dernier message: 15/05/2006, 23h18
  3. simple question sur du html avec frames
    Par Thordax dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/05/2006, 11h48
  4. job... question sur "Operating Systems"
    Par luta dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 05/04/2006, 14h36
  5. Réponses: 5
    Dernier message: 13/10/2005, 12h46

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