Re: Callbacks en C++

Page principale

Répondre à ce message
Auteur: Frédéric
Date:  
À: Guilde
Sujet: Re: Callbacks en C++
Le 09/03/2023, Edgar a écrit :

> [...] Mais si le callback a besoin d'accéder à des données de *une
> instance* particulière de la classe, ce callback ne peut pas être une
> méthode statique.


Je suis dans ce cas ;o)

> Pour utiliser un tel callback il faut :
>
>   - que l'appelant stocke, en plus du pointeur vers le callback, une
>     référence à (ou un pointeur vers) l'instance que tu veux utiliser ;

>
>   - que le callback soit déclaré comme un pointeur vers une instance
>     d'une classe spécifique, et non un simple pointeur de fonction.

>
> La syntaxe devient un peu tordue quand tu manipules des pointeurs
> d'instance. Voici un exemple :
> [...]


Ah, j'ai l'impression que je n'étais pas loin dans mon dernier test ; je
creuse ton code...

> En C++ moderne, il y a moyen d'encapsuler le pointeur vers l'instance et
> le pointeur vers la méthode dans un std::function, dont l'usage est
> vraiment commode avec des lambdas. Seulement, dans l'environnement
> Arduino, les facilités du C++ moderne ne sont pas toujours disponibles.
> En particulier, sur AVR, tu as C++11 mais pas la STL, et donc pas
> std::function. On est donc réduits à des méthodes plus pédestres, comme
> dans le code ci-dessus.


Ouaip, c'est ce que j'avais vu : j'ai essayé une ou deux librairies, mais
qui s'appuyaient toutes sur function ou bind.

Merci pour le topo !

PS : pourquoi le C++ n'ajoute-t-il pas un type double pointeur pour régler
     ce problème récurrent ? Ça rendrait le code quand même plus lisible,
     non ?


-- 
    Frédéric