Bonjour,
Je cherche à passer du code directement à une fonction. Est-ce possible en c++ (pour Arduino)?
Si oui, comment déclarer la fonction process?Code:
1
2
3
4 process({...});
Merci
Version imprimable
Bonjour,
Je cherche à passer du code directement à une fonction. Est-ce possible en c++ (pour Arduino)?
Si oui, comment déclarer la fonction process?Code:
1
2
3
4 process({...});
Merci
Bonjour
Le plus simple est de prendre un argument template qui correspond à une fonction.
Tu pourras passer une référence de fonction, un foncteur ou une lambda fonction (C++11).
Le programme affiche (C++98 & C++11) :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 // g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++11 -pedantic -fopenmp main.cpp -o main && ./main // g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++98 -pedantic -fopenmp main.cpp -o main && ./main #include <iostream> template <class fct_t> void process(fct_t const & fct) { fct(); } class fonctor { public: void operator()() const { std::cout << "Exécution de fonctor()" << std::endl; } }; void fct() { std::cout << "Exécution de fct()()" << std::endl; } int main() { process(fct); process(fonctor()); #if __cplusplus > 199711L process([]() -> void { std::cout << "Exécution de la lambda fonction" << std::endl; }); #endif return 0; }
Edit : Ça fonctionne aussi avec std::function.Citation:
$ g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++98 -pedantic -fopenmp main.cpp -o main && ./main
Exécution de fct()
Exécution de fonctor()()
$ g++ -Wall -Wextra -Wconversion -Wsign-conversion -std=c++11 -pedantic -fopenmp main.cpp -o main && ./main
Exécution de fct()
Exécution de fonctor()()
Exécution de la lambda fonction
Il ne veut pas passer une fonction, il veut passer du code.
Ce qui est impossible en Python (mais possible en C++).
(Tu as inversé Python et C++ dans ton explication ?)
Passer du code ou une lambda fonction qui attrape tout par référence : il y a juste une (très légère) différence de syntaxe.
En C++98, il faut créer un foncteur qui prend des références sur les variables nécessaires dans le constructeur, c'est plus lourd.
Sur Arduino, cela ne fonctionne pas. Merci pour vos interventions.
Un foncteur ne fonctionne pas sur Arduino ? Une référence de fonction non plus ?
Sinon, pointeur de fonction comme en C...