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

SL & STL C++ Discussion :

str::tr1::function dans std::vector


Sujet :

SL & STL C++

  1. #1
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut str::tr1::function dans std::vector
    Bonjour!

    J'ai un code de test suivant (utilisant l'implementation du TR1 de Visual Studio 2008 Feature Pack ) :

    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
    #include <functional>
    #include <iostream>
    #include <vector>
    #include <algorithm>
     
    typedef std::tr1::function< void (int)> TestFunction;
     
    class Test
    {
    public:
     
     
    	void testA( int a )
    	{
    		std::cout << "TEST A" << std::endl;
    	}
     
    	void testB( int b )
    	{
    		std::cout << "TEST B" << std::endl;
    	}
     
    	void registerFunction( std::vector< TestFunction >& functionList )
    	{
    		TestFunction functionA( std::bind1st( std::mem_fun( &Test::testA ) , this ) ) ;
    		functionList.push_back( functionA );
    		TestFunction functionB( std::bind1st( std::mem_fun( &Test::testB ) , this ) ) ;
    		functionList.push_back( functionB );
    	}
     
    };
     
    void testMachin( int k )
    {
    	std::cout << "Test MACHIN" << std::endl;
    }
     
    int main()
    {
    	Test test;
     
    	std::vector< TestFunction > functionList;
    	functionList.push_back( &testMachin );
     
    	test.registerFunction( functionList );
     
    	if( std::find( functionList.begin(), functionList.end(), &testMachin ) != functionList.end() )
    	{
    		std::cout << "Test machin is in the place!" << std::endl;
    	}
     
    	for( unsigned int i = 0; i < functionList.size(); ++i )
    	{
    		functionList[ i ]( i );
    	}
     
    	std::system( "pause" );
     
     
    }
    Ce code ne compile pas a cause du find qui utilise l'operateur == qui n'est pas accessible pour std::tr1::function.
    Dans la FAQ de boost, il est conseillé d'utiliser boost::signal à la place.

    Mais avant de m'y mettre, je voudrais savoir si il y a un moyen de stocker des std::tr1::function dans un std::vector et de pouvoir manipuler les algorithmes dessus autrement qu'en passant par des pointeurs?

    Parceque là on peut même pas faire std::erase( std::remove( ... et ça me semble bizarre que ça soit pas possible.

  2. #2
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    function fournit parfaitement l'operator==... Ça ne fait que forwarder au foncteur contenu.
    Boost ftw

  3. #3
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Aaah ok je comprends mieu... mais du coup ça regle pas le problème.

    J'imagine que je ferais mieu d'utiliser boost::signal dans ce type de cas.

Discussions similaires

  1. enfiler et défiler dans std::vector
    Par mohsenuss91 dans le forum C++
    Réponses: 3
    Dernier message: 18/05/2015, 08h44
  2. Suppression dans un std::vector
    Par bobo034 dans le forum SL & STL
    Réponses: 1
    Dernier message: 18/07/2008, 16h16
  3. Libération de pointeurs dans un std::vector
    Par G dans le forum SL & STL
    Réponses: 17
    Dernier message: 06/04/2005, 22h37
  4. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  5. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 13h30

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