Comment utiliser les fonctions lambda dans Arduino?
Je veux passer une fonction lambda comme argument à une méthode. Exemple:
T reduce(const T initial, const std::function<T(T, T)> acc) {
T value = initial;
for (size_t i = 0; i < S; ++i) {
value = acc(value, this->values[i]);
}
return value;
}
...
int sum = this->reduce(42, [](int acc, int value) { return acc + value; });
Si j'essaye de compiler ce code pour Arduino, j'obtiens une erreur évidente:
erreur: 'function' dans l'espace de noms 'std' ne nomme pas de type de modèle
Comment puis-je utiliser une fonction lambda dans Arduino?
Réponses
std::functionn'est pas pris en charge par l'environnement Arduino . ( Edit : comme mentionné par KIIV dans un commentaire, il est pris en charge sur les cibles ARM, mais pas sur AVR.) Vous pouvez, cependant, passer un lambda non capturant à une fonction qui attend un pointeur de fonction simple. Par exemple, étant donné
T reduce(const T initial, T (*acc)(T, T)) {
T value = initial;
for (size_t i = 0; i < S; ++i) {
value = acc(value, this->values[i]);
}
return value;
}
Vous pouvez l'appeler comme
int sum = test.reduce(42, [](int acc, int value){ return acc + value; });
Si vous voulez que votre lambda capture quelque chose, il semblerait que vous n'ayez pas de chance ...