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++

  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;

  8. #8
    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
    Erff, je ne suis pas sur C++11.
    Par contre j'utilise la lib boost.

    Pour le moment je r�cup�re un fatal error.
    Unknown type


  9. #9
    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
    Je reposte mon code en entier avec le fatal error lors de l'ex�cution:

    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
     
     
    	DataReader* R_Ptr = new DataReader();
     
     
    	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 << (R_Ptr->*(*it))() << std::endl;
    	}

  10. #10
    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
    Une id�e?

  11. #11
    Expert confirm�

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Software Developer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par d�faut
    J'ai pris ce code, j'ai cr�� une structure DataReader toute con:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct DataReader
    {
    	float getLa()
    	{
    		return 1.0f;
    	}
    	float getLon()
    	{
    		return 2.0f;
    	}
    };
    Et �a s'ex�cute sans soucis. Le probl�me ne vient pas de l�.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).

  12. #12
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    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.

  13. #13
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    float ou float64? Il faudrait savoir...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    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
    Hum, en effet je confirme, �a marche bien dans mes tests.
    Ci joint le code teste de mon programme (version simplifi�)

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
     
    #include <iostream>
    #include <vector>
    using namespace std;
     
    struct Data
    {
    	float La;
    	float Lon;
    };
     
    class DataWriter
    {
    public:
    	DataWriter(){};
    	~DataWriter();
     
    	void setLa(Data &a,float La){a.La = La;}
    	void setLon(Data &a,float Lon){a.Lon = Lon;}
     
    };
     
    class DataReader
    {
    public:
    	DataReader(Data &a){this->data = &a;};
    	~DataReader();
     
    	float getLa(){return data->La;}
    	float getLon(){return data->Lon;}
     
    private:
    	Data* data;
    };
     
    int main() {
     
    	Data a;
    	DataReader* R_Ptr = new DataReader(a);
    	DataWriter* W_Ptr = new DataWriter();
     
    	W_Ptr->setLa(a,5);
    	W_Ptr->setLon(a,9);
     
    	typedef float (DataReader::*getFonction)();
     
    	std::vector<getFonction> vec;
    	std::vector<getFonction>::iterator it;
    	getFonction test = (&DataReader::getLa);
     
    	vec.push_back(&DataReader::getLa);
    	vec.push_back(&DataReader::getLon);
     
    	for(it = vec.begin(); it < vec.end(); it++)
    	{
    		test = *it;
    		std::cout << (R_Ptr->*(test))();
    		std::cout << std::endl;
    	}
     
    	W_Ptr->setLa(a,20);
    	W_Ptr->setLon(a,30);
     
    	for(it = vec.begin(); it < vec.end(); it++)
    	{
    		test = *it;
    		std::cout << (R_Ptr->*(test))();
    		std::cout << std::endl;
    	}
     
    	return 0;
    }
    Valeurs retourn�es:
    5
    9
    20
    30

  15. #15
    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
    Voici une base pour commencer, J'initialise un vecteur avec des valeurs de 0~9 et je le parcours dans une boucle pour afficher chaque valeur.

    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
    #include <iostream>
    #include <vector>
     
    int main ()
    {
      std::vector<int> myvector (10);   // init de mon vecteur d'une taille de 10
     
      // Ajout de valeur à mon vecteur:
      for (unsigned i=0; i<myvector.size(); i++)
        myvector.at(i)=i;
     
      std::cout << "myvector contient les valeurs suivantes:";
      for (unsigned i=0; i<myvector.size(); i++)
        std::cout << ' ' << myvector.at(i);
      std::cout << '\n';
     
      return 0;
    }

  16. #16
    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
    Yop, j'avais laiss� pas mal d'erreur dans mon poste pr�c�dant, je l'ai modifi�.
    Maintenant �a marche mais pas pour mon application cible.

  17. #17
    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 cela fonctionne c'est cool apr�s concernant ton appli cible �a j'ai envie de dire que c'est un autre soucis.

  18. #18
    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
    Je pense que le probl�me vient de l'appli qui est destin�e � du syst�me embarqu�e.
    Appli qui se base sur la lib boost et qui a pour cible un boitier (ARM) sur linux (version simplifi�).

  19. #19
    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
    qu'elles sont les erreurs lorsque tu l�ex�cute sur ton appli cible ?

  20. #20
    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
    Je r�cup�re comme erreur:

    fatal error in "...": unknown type

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

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