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 :

Vector de function


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Par défaut Vector de function
    Bonjour,

    J’essaie actuellement de créer un vector contenant des fonction d'une classe.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef float64 (DataReader::*getFonction)();
     
    std::vector<getFonction> vec;
    std::vector<getFonction>::iterator it;
     
    vec.push_back(&DataReader::getLa);
    vec.push_back(&DataReader::getLon);
     
    for(it = vec.begin(); it<vec.end(); it++)
    	std::cout << *it << std::endl;
    Les fonction "get..." (non static) doivent retournées des valeurs stocke sur des ressources partagées et déjà initialisées.
    Mais voilà, elles me retournent uniquement la valeurs '1'.

    Une idée?

  2. #2
    Membre éclairé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Par défaut
    Bonjour,

    Qu'attend tu en sortie ?

    Ici Il est implicitement converti en bool.

  3. #3
    Membre très actif
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Par défaut
    J'attends en sortie un float.
    Les valeurs attendues sont: 80 & 60

  4. #4
    Membre éclairé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Par défaut
    Ici dans ton exemple en sortie tu as juste une représentation du pointeur de fonction , qui est implicitement convertie en booléen et la sortie vaut 1 parce qu'il n'est pas null .

    Si tu veux appeler la fonction et avoir valeur de retour en sortie, tu as besoin de l'appeler sur une instance :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataReader reader;
     
    for(it = vec.begin(); it<vec.end(); it++)
        std::cout << (reader.*(*it))() << std::endl;

  5. #5
    Membre très actif
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Par défaut
    Ha ok merci,

    Par contre le compilo m'insulte méchamment:
    J'ai instancier ma classe comme suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataReader* R_Ptr = new DataReader();
    et modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::cout << (R_Ptr->*it)() << std::endl;
    Ps: Même chose si je fais en instance

  6. #6
    Membre éclairé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Par défaut
    Citation Envoyé par Hyssgrif Voir le message
    Ha ok merci,

    Par contre le compilo m'insulte méchamment:
    J'ai instancier ma classe comme suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataReader* R_Ptr = new DataReader();
    et modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::cout << (R_Ptr->*it)() << std::endl;
    regarde au dessus j'ai mis à jour le code pour l'affichage

  7. #7
    Membre éclairé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Par défaut
    Si tu utilises C++11, peut-être mieux adapté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using getFunction = std::function<leap::float64(DataReader&)>;
     
    std::vector<getFunction> vec;
    std::vector<getFunction>::iterator it;
     
    vec.emplace_back(&DataReader::getLa);
    vec.emplace_back(&DataReader::getLon);
     
    DataReader reader;
    for(it = vec.begin(); it<vec.end(); it++)
        std::cout << (*it)(reader) << std::endl;

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

Discussions similaires

  1. str::tr1::function dans std::vector
    Par Klaim dans le forum SL & STL
    Réponses: 2
    Dernier message: 25/06/2008, 14h19
  2. [POSTGRESQL] exec function
    Par peuh dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/05/2003, 15h15
  3. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37

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