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 :

mem_fun avec une fonction const


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut mem_fun avec une fonction const
    Bonjour,

    j'utilise mem_fun comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    unsigned int CAnswerDlg::GetPendingRequestCount()
    {
    	CSingleLock keyReq (&m_semRequest);
    	if (keyReq.Lock() == TRUE)
    		return std::count_if(m_listWaitingRequests.begin(), m_listWaitingRequests.end(), std::mem_fun(&CRequest::IsPending )) ;
     
    	return 0;
    }
    avec IsPending :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BOOL CRequest::IsPending() const
    {
    	return (WaitForSingleObject(m_evtComplete, 0) == WAIT_TIMEOUT);
    J'ai donc une erreur de compilation dû au const de la fonction.
    Est-ce que j'ai une autre possibilité que de supprimer le const ?

    Merci par avance,
    @+

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Avec mon Visual C++ 2005 ça passe très bien.

    De toute façon, trop de STL + VC6 = grosse galère en perspective. Le mieux que tu aies encore à faire, c'est faire ton count_if à la main.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    attends, je te donne l'erreur exacte :

    error C2664: 'mem_fun' : cannot convert parameter 1 from 'int (__thiscall CRequest::*)(void) const' to 'int (__thiscall CRequest::*)(void)'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Sinon, je fais sauter le const ! Mais comme j'utilise cette fonction sur des objets const (ailleurs), ça me fait modifier pas mal d'autres trucs !!


    Pfff ... tant que j'utilisais pas trop la STL, ça allait ... mais là ça commence à être dûr, et encore on peut pas dire que je l'utilise beaucoup.

    Je le testerai quand même sous VC2005
    Merci beaucoup.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Sinon tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::mem_fun(const_cast<int(CRequest::*)(void)>(&CRequest::IsPending))

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Salut,

    merci mais ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    return std::count_if(
      m_listWaitingRequests.begin(),		
      m_listWaitingRequests.end(),			
      std::mem_fun(const_cast<int (CRequest::*)(void)> (&CRequest::IsPending) ) );
    J'obtiens :
    error C2440: 'const_cast' : cannot convert from 'int (__thiscall CRequest::*)(void) const' to 'int (__thiscall CRequest::*)(void)'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Discussions similaires

  1. Problème avec une fonction const et une référence & !
    Par Seabast888 dans le forum Débuter
    Réponses: 2
    Dernier message: 19/10/2009, 13h08
  2. Définir une "Public Const" avec une fonction
    Par bernardmichel dans le forum VBA Access
    Réponses: 6
    Dernier message: 29/09/2007, 15h16
  3. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15
  4. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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