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

Boost C++ Discussion :

multi_index_container et composite_key


Sujet :

Boost C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut multi_index_container et composite_key
    Hello la compagnie,

    J'utilise actuellement un container multi_index_container avec un index de type composite_key.
    Est-il possible d'utiliser une fonction utilisant des paramètres par défaut?

    Je m'explique...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ordered_non_unique<tag<CONFERENCEAVAILABLE>,	composite_key<
    																									std::shared_ptr<Conference>,
    																									const_mem_fun<Resource, const MEDIA_STATE &, &Resource::getMediaState>,
    																									const_mem_fun<Conference, const unsigned int, &Conference::getNbMembers>,
    																									const_mem_fun<Resource, const uint64_t, &Resource::getMediaStateDuration>,
    																									const_mem_fun<Resource, const int &, &Resource::getNumber>
    																						>
    La méthode getMediaStateDuration a pour signature :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const uint64_t						getMediaStateDuration() const
    Je souhaiterais modifier la signature en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const uint64_t						getMediaStateDuration(const uint64_t &now = _MCU->getTimestamp()) const
    Le probleme est que j'obtiens l'erreur : ./includes/conferencemanager.hpp:35:98: error: could not convert template argument ‘&Resource::getMediaStateDuration’ from ‘const uint64_t (Resource::*)(const uint64_t&) const’ {aka ‘const long unsigned int (Resource::*)(const long unsigned int&) const’} to ‘const long unsigned int (Resource::*)() const’

    Pour retirer l'erreur, il faut que je supprime la valeur par défaut et que je créé une méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inline const uint64_t					getMediaStateDuration() const { this->getMediaStateDuration(_MCU->getTimestamp()); }
    Est-ce qu'il y a un moyen de supprimer le doublon?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Une valeur par défaut est résolue pas l'appelant, donc elle doit être une valeur qu'il peut résoudre.
    _MCU, dont on ne sait rien, est une variable membre je suppose. Tu peux pas utiliser ça comme valeur par défaut, et encore moins un appel à un membre de ce truc.
    Cela dit, c'est trivial de contourner cette limitation...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void Pouet() { Pouet(ma_variable_membre.call()); }
    void Pouet(int v) { /*whatever*/ }
    Et ce n'est pas de la duplication de code.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    Hello,

    Je n'ai pas donné de détail concernant l'objet _MCU parce qu'il est plutôt touffu et je pensais que le nom de la méthode était assez explicite. En fait, mon objet _MCU est un shared_ptr déclaré en tant que global c'est pour ça que je pensais pouvoir faire une seule méthode avec une valeur par défaut.
    Comme dit dans mon premier message, je sais comment contourner le problème mais avoir 2 méthodes dont une qui appelle la deuxieme... je voulais m'en passer

    Merci pour tes explications

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

Discussions similaires

  1. multi_index_container et non const
    Par mister3957 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 27/10/2013, 14h51
  2. Utilisation du multi_index_container
    Par mister3957 dans le forum Boost
    Réponses: 0
    Dernier message: 13/04/2012, 10h49
  3. boost::multi_index_container et accesseurs
    Par typedef dans le forum Boost
    Réponses: 2
    Dernier message: 05/12/2010, 18h08

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