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