Salut
Boost est en effet une collection de fonctions qui aident le programmeur à ne pas réinventer la roue - par exemple des tas de fonctions de géométrie, arithmétique etc
le second code que vous avez posté se lit comme cela
On dit que doActionsArray
est un tableau de pointeur sur fonction ne prenant aucun paramètre et ne retournant rien, dont la taille est définie par les initialization qui suivent
[color=blue]void[/color] (*doActionsArray []) [color=green]()[/color] =[size=8pt]
[color=purple]|[sub]->[/sub] pas de taille car le compilateur va compter les définitions[/color]
[/size]
ensuite donc dans le tableau on doit mettre pointeurs sur fonctions. Généralement en approche traditionnelle on définirait des fonctions du genre
void fonction0()
{
Serial.println(0);
}
void fonction1()
{
Serial.println(1);
}
et on mettrait dans le tableau fonction0
et fonction1
.
Cela oblige à déclarer formellement les fonctions.
le langage C++, depuis C++11, supporte la notion de fermeture ou clôture (en anglais : closure). C'est un gros mot pour dire une fonction accompagnée de son environnement lexical - c'est à dire l'ensemble des variables non locales qu'elle a capturé, soit par valeur (c'est-à-dire par copie des valeurs des variables), soit par référence (c'est-à-dire par copie des adresses mémoires des variables).
Une clôture est donc créée par exemple lorsqu'une fonction est définie dans le corps d'une autre fonction et utilise des paramètres ou des variables locales de cette dernière.
Une Lambda expression va construire une clôture, c'est à dire un objet de type fonction capable de capturer des variables en contexte. La syntaxe est à lire ici.
Donc quand il met dans la première entrée de son tableau
[color=red][][/color] [color=blue]{ Serial.println (0); }[/color]
il dit je déclare une fonction lambda qui n'a aucun symbole capturé (les premiers crochets vides - ce sont les symboles visibles à l'intérieur du corps de la fonction) dont le corps de la fonction est { Serial.println (0); }
et ensuite il refait de même avec d'autres expressions lambda
au final donc le tableau contient 5 pointeurs sur fonctions qui impriment leur indice dans le tableau quand on les appelle.
par exemple quand il fait doActionsArray[3]();
il va chercher l'expression lambda se trouvant en quatrième position (les indices commencent à 0) et donc ça va imprimer 3 sur la console Série.
ça aide ?