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

Téléchargez C++ Discussion :

Signaux/slots c++0x


Sujet :

Téléchargez C++

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut Signaux/slots c++0x
    Bonjour, Je vous propose un nouvel élément à utiliser : Signaux/slots c++0x



    Cette bibliothèque propose un système de signaux/slots, utilisable avec c++1x (en particulier avec son support dans gcc 4.5).

    Toute documentation est en anglais, dans les headers.



    Qu'en pensez-vous ?

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Question béotienne : Qu'apporte ton code par rapport à boost.Signals2 ?

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Très bonne question. Cette bibliothèque ne fonctionne pas du tout sur le même principe :

    Avec boost.signals (il me semble que boost.signals2 rajoute juste le thread-safe), tu es obligé un objet d'un type très particulier :
    Tu ne peux faire signal mysignal; et connecter tout et n'importe quoi : il y a un type template ce qui empêche la mise dans un conteneur par exemple.

    Avec mon système, on déclare un objet comme "pouvant recevoir des connections" en l'héritant de Emittable. Le template à Emittable ne sert qu'à pouvoir appliquer le CRTP.

    Par exemple, si je prend l'exemple du tutoriel de boost, on peut avoir des signaux pour "OnClick". Ce qui signifie que la classe doit prévoir les évènements qui peuvent être émis. Avec mon système, on hérite de Emittable<ce qu'on veut> et lors du constructeur on fait Connect("ClickEvent", ma_fonction);

    Puisqu'il semblerait que dans la "présentation" mon exemple ait été coupé, je vais le reposter ici :

    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
     
    #include <iostream>
    #include <EventSystem/EventSystem.hpp>
    #include <ctime>
     
    using namespace std::placeholders;
     
    class Exemple : public ES::Emittable<Exemple>
    {
        private :
            std::map<int, std::string> Commentaires;
        public :
            void ShowCommentaire(std::clock_t deb, std::clock_t fin)
            {
                int sec=(fin-deb)/CLOCKS_PER_SEC;
                auto it=Commentaires.find(sec);
                if(it==Commentaires.end())
                    std::cout<<"\nVous etes lamentablement long a taper au clavier";
                else
                    std::cout<<"\n"<<it->second;
            }
            Exemple() : Commentaires{std::make_pair(0,"Remarquable"),std::make_pair(1,"Remarquable"),std::make_pair(2,"Remarquable"),
            std::make_pair(3,"Tres Bien"), std::make_pair(4,"Tres Bien"),std::make_pair(5,"Tres Bien"),
            std::make_pair(6,"Bien"),std::make_pair(7,"Bien"),std::make_pair(8,"Bien"),
            std::make_pair(9,"Moyen"),std::make_pair(10,"Moyen"),std::make_pair(11,"Moyen"),
            std::make_pair(12,"Mauvais"),std::make_pair(13,"Mauvais"),std::make_pair(14,"Mauvais")}
            {}
    };
     
    void ShowTime(std::clock_t deb, std::clock_t timefin)
    {
        std::cout<<"\nVous avez mis "<<static_cast<float>(timefin-deb)/CLOCKS_PER_SEC<<" secondes a taper votre chaine de caractere";
    }
     
    int main()
    {
        unsigned deb=clock();
        std::string EstValide;
        Exemple e;
        e.Connect("Fini",ES::Event<std::clock_t>::MakeCallback(ShowTime, deb, _1));
        e.Connect("Fini",ES::Event<std::clock_t>::MakeCallback(ES::MakeMember(e, &Exemple::ShowCommentaire), deb, _1));
        do
        {
            std::cout<<"Ce programme vous affichera le temps mis a taper la chaine de caractere avec un systeme evenementiel. Veuillez taper \"Bonjour Bienvenu dans un nouveau monde.\".\n";
            getline(std::cin, EstValide);
            std::cout<<"\n\n";
            std::cin.clear();
        }while(EstValide!="Bonjour Bienvenu dans un nouveau monde.");
        std::cout<<"\nOK Vous avez reussi a taper la chaine.";
        e.Emit("Fini", ES::Event<std::clock_t>(clock()));
        return 0;
    }
    De plus, comment gérer dynamiquement le nombre de différents signaux (je ne dis pas que c'est impossible, je dis juste que sa ne me parait pas évident) ?


    D'autre part, je n'utilise aucune fonction virtuelle. Malheureusement, sa me semble pas très plausible et j'aimerais savoir si les lambda peuvent parfois agir en tant que fonction virtuelle. Si oui, est-ce le cas dans cette bibliothèque ?

Discussions similaires

  1. Signaux & Slots deffaillants / Conseil Effets
    Par secksy dans le forum Débuter
    Réponses: 37
    Dernier message: 10/01/2009, 13h07
  2. Multithreading et signaux/slots
    Par Matthieu Brucher dans le forum PyQt
    Réponses: 1
    Dernier message: 31/07/2008, 11h16
  3. Qt4 Signaux/slots personnels et Code::Blocks
    Par crtx_omar dans le forum Qt
    Réponses: 11
    Dernier message: 30/03/2008, 15h05
  4. Signaux / slots
    Par yoloosis dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 05/03/2008, 15h58

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