Re: C++

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: guilde
Subject: Re: C++
Frédéric a écrit :
> dans ces callbacks, je veux pouvoir accéder à la tripaille de mon
> objet


Dans ce cas il faut que la tripaille à la quelle tu veux accéder soit
aussi ‘static’.

Évidemment, si tu veux avoir plus d'un objet de la même classe, ça va
poser problème. Je ne pense pas qu'il y ait de solution sans modifier la
bibliothèque. Les lambdas ne vont pas t'aider : la bibliothèque attend
un simple pointeur de fonction (type SelectFnPtr). Une méthode statique
est compatible avec un pointeur de fonction, de même qu'une lambda qui
ne capture pas. Mais tu ne pourras pas passer un foncteur ou une lambda
qui capture quelque chose à la place d'un pointeur de fonction.

Si tu peux te permettre de modifier la bibliothèque, le plus élégant
serait probablement de lui faire accepter std::function. Tu pourrais
alors lui passer une lambda qui capture un pointeur vers ton objet. Mais
il me semble que ce type (défini dans l'en-tête <functional>) n'est pas
disponible dans l'environnement Arduino. Du moins pas en AVR.

L'autre option c'est de faire à la mode d'antan : tu modifies la
bibliothèque pour qu'elle accepte un void* à côté du pointeur de
fonction. Le code client fait ce qu'il veut de ce void*, et tu t'en sers
pour passer un pointeur vers l'instance de ta classe. C'est la façon
canonique de définir des callbacks en C de base.

À+,

Edgar.