lang:cpp:variable
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| lang:cpp:variable [2020/02/11 23:34] – Ajout de "Initialisation complexe d'une variable constante" root | lang:cpp:variable [2025/07/28 10:36] (Version actuelle) – Précision sur l'utilisation de la lambda dans "Initialisation complexe d'une constante" root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ===Initialisation complexe d'une variable constante=== | + | ====Déclaration des variables==== |
| + | ===Pointeur sur méthode vs std:: | ||
| - | Plutôt | + | '' |
| + | |||
| + | De même, il faut préfixer par un '' | ||
| <code cpp> | <code cpp> | ||
| - | std::string str; | + | #include < |
| - | if (i == 1) | + | |
| - | | + | int main() { |
| - | else if (i = 2) | + | auto funcPtr = +[] {}; |
| - | | + | static_assert(std::is_same< |
| - | else | + | |
| - | | + | |
| + | // funcPtr3 est un std:: | ||
| + | | ||
| + | // error: static assertion failed | ||
| + | | ||
| + | } | ||
| </ | </ | ||
| - | écrire | + | [[https:// |
| + | |||
| + | ===Pointeur sur la méthode d'une classe=== | ||
| + | |||
| + | {{gh> | ||
| + | |||
| + | Exemple avec une fonction utilisant des template avec auto déduction. Dans ce cas, il faudra faire un cast pour donner le type des éléments déduits. | ||
| <code cpp> | <code cpp> | ||
| - | const std::string str = [& | + | struct S5 { |
| - | { | + | |
| - | | + | void f(U&& |
| - | | + | |
| - | else if (i == 2) | + | |
| - | return | + | }; |
| - | | + | |
| - | | + | auto ptr = static_cast< |
| - | }(); | + | |
| </ | </ | ||
| - | ===Pointeur | + | [[https:// |
| + | |||
| + | ===Pointeur | ||
| <code cpp> | <code cpp> | ||
| - | // La classe | + | struct Z { |
| - | class Classe | + | |
| - | { | + | |
| - | public: | + | |
| - | | + | |
| - | const Classe* function(size_t i) const | + | |
| - | { return this; } | + | |
| - | // Ici. | + | |
| - | const Classe* function2(size_t i) const | + | |
| - | { return this; } | + | |
| }; | }; | ||
| - | int main() | + | struct A { |
| - | { | + | Z* i; |
| - | | + | }; |
| - | const Classe* (Classe::*ptr)(size_t i) const = &Classe::function2; | + | |
| - | | + | struct B { |
| - | (C.*ptr)(2); | + | A a; |
| + | }; | ||
| + | |||
| + | int main() { | ||
| + | | ||
| + | auto ptr2 = &A::i; | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | int z = (b.*ptr1.*ptr2)->z; | ||
| } | } | ||
| </ | </ | ||
| - | ===Connaître le type d'une variable auto à la compilation=== | + | ===Variable optionnelle=== |
| - | Cela se fait en lisant le message d' | + | |
| - | < | + | Création une variable '' |
| - | template< | + | |
| - | int main() { | + | <code cpp> |
| - | auto x = ...; | + | std:: |
| - | S<decltype(x)>(); | + | |
| - | } | + | |
| </ | </ | ||
| - | Message d' | + | ====Programmation fonctionnelle==== |
| - | utilisation du type non défini ' | + | |
| - | [[https:// | + | ===Initialisation complexe d'une constante=== |
| - | ===Pointer vers une classe template depuis une classe sans template=== | + | Plutôt que |
| - | Il faut mettre une interface commune sans template à la classe template. | + | |
| - | <code cpp> | + | {{gh> |
| - | struct BaseExample | + | |
| - | virtual void do_stuff() = 0; | + | |
| - | virtual ~BaseExample() | + | |
| - | }; | + | |
| - | template < | + | écrire |
| - | struct Example : BaseExample { ... }; | + | |
| - | // .. | + | {{gh> |
| - | BaseExample *obj; | + | |
| - | </code> | + | <WRAP center round info 60%> |
| + | Bien noter que la lambda est exécutée tout de suite avec un '' | ||
| + | </WRAP> | ||
| - | [[https:// | ||
lang/cpp/variable.1581460452.txt.gz · Dernière modification : de root
