From fda801e0f052faf40ab82740dfe989f85a7f42dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?El=20Kharroubi=20Micha=C3=ABl?= <michael.el-kharroubi@hesge.ch> Date: Mon, 26 Feb 2024 09:29:26 +0100 Subject: [PATCH] [WIP] Working on lambda and captures --- cpp_basics_for_STL.typ | 58 +++++++++++++++++++++++++++++++++++++++++- intro.typ | 2 +- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/cpp_basics_for_STL.typ b/cpp_basics_for_STL.typ index 959536b..6e32672 100644 --- a/cpp_basics_for_STL.typ +++ b/cpp_basics_for_STL.typ @@ -220,7 +220,63 @@ delete[] ptr; ``` ] -#new-section-slide("Closures") +#new-section-slide("Lambda & captures") + +#slide( + title: "Les fonctions anonymes", +)[ +De plus en plus de langages proposent un mechanisme pour écrire des fonctions +anonymes, aussi appelées expressions lambda. + +Depuis C++ 11, il existe un moyen d'écrire des fonctions lambda. La syntaxe +simplifiée d'une lambda en C++ est la suivante : ```cpp +[captures](paramètres){corps de la fonction} +``` + +Si je veux par exemple définir une fonction qui multiplie un entier par 2, je +peux écrire : ```cpp +auto times_two = [](int i){return 2*i;}; +int x = times_two(3); // x vaut 6 +``` +] + +#slide( + title: "Les captures", +)[ +Les expressions lambda en C++ peuvent capturer leur environnement. + +Si je souhaite par exemple ajouter une constante à en entier, je peux écrire : + +```cpp +int cst = 5; +auto add_cst = [cst](int i){ return i+cst;}; +int x = add_cst(10); // x vaut 15 +``` +] + +#slide(title: "Les types de captures")[ +Il existe deux moyens de capturer une variable : + +#box(columns(2, gutter: 22pt)[ +== Par copie +```cpp +int var = 5; +auto add_cst = [v=var](int i) + { return i+v; }; +var = 2; +int x = add_cst(10); // x vaut 15 +``` +#colbreak() +== Par référence +```cpp +int var = 5; +auto add_cst = [v=&var](int i) + { return i+v;}; +var = 2; +int x = add_cst(10); // x vaut 12 +``` +]) +] #new-section-slide("Algorithmes STL") diff --git a/intro.typ b/intro.typ index 9c71743..ecab40a 100644 --- a/intro.typ +++ b/intro.typ @@ -44,7 +44,7 @@ + La gestion de la mémoire en GPGPU #pause + Les itérateurs C++ + Les vecteurs, les tableaux et les spans - + Les captures + + Les lambda & captures + Les algorithmes de la Standard Template Library (STL) #pause + Présentation du kit HPC Nvidia + Le compilateur nvc++ -- GitLab