Re: Callbacks en C++

トップ ページ

このメッセージに返信
著者: Edgar Bonet
日付:  
To: guilde
題目: Re: Callbacks en C++
Frédéric a écrit :
> pourquoi le C++ n'ajoute-t-il pas un type double pointeur pour régler
> ce problème récurrent ?


Ils ont ajouté std::function et std::bind. ;-)

Remarque que tu as besoin des deux pointeurs uniquement quand tu ne sais
pas, a priori (à la compilation), quelle instance tu vas utiliser, ni
quelle méthode de cette instance. Si tu vas utiliser plusieurs méthodes,
mais toujours la même instance, tu n'as pas besoin du pointeur vers
l'objet. De même, si tu vas utiliser toujours la même méthode, mais
plusieurs instances, tu n'as pas besoin du pointeur de méthode.

Un cas particulier est lorsque tu peux utiliser plusieurs objets de
différentes classes mais, pour chacune de ces classes, une seule méthode
est possible. Dans ce cas tu peux faire dériver toutes ces classes d'une
même classe abstraite, et utiliser une unique méthode virtuelle:

    class Callback {  // abstract class
    public:
        virtual void take_call() = 0;
    };


    class Caller {
    public:
        Caller(Callback &cb) : callback(cb) {}
        void call() { callback.take_call(); }
    private:
        Callback &callback;
    };


    class Callee : public Callback {
    public:
        void take_call() { Serial.println("Hello, World!"); }
    };


    void setup()
    {
        Serial.begin(9600);
        Callee a;
        Caller b(a);
        b.call();
    }


À+,

Edgar.