Skip to content
Snippets Groups Projects
Commit fda801e0 authored by Michaël El Kharroubi's avatar Michaël El Kharroubi :satellite:
Browse files

[WIP] Working on lambda and captures

parent 77b0eab7
Branches
No related tags found
No related merge requests found
......@@ -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")
......
......@@ -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++
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment