Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Quelques
notions de
méta-
programmation
en C++
Florian
Galinier
Petits rappels
Méta-
programmation
Spécialisation et
récur...
Prochain SlideShare
Chargement dans…5
×

Quelques notions de méta-programmation en C++

191 vues

Publié le

Cette présentation fait suite à celle d'introduction à la méta-programmation avec templates de C++ (http://fr.slideshare.net/galinierf/introduction-la-metaprogrammation-en-c).
J'ai présenté quelques notions un peu plus avancé dans le but de démontrer que plus qu'un gadget rigolo, la méta-programmation peut vraiment être utile, notamment lors de l'écriture de bibliothèques génériques.
Cette présentation a été donnée lors des Rencontres C++ à Montpellier le 24/11/12.

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
191
Sur SlideShare
0
Issues des intégrations
0
Intégrations
6
Actions
Partages
0
Téléchargements
2
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Quelques notions de méta-programmation en C++

  1. 1. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Quelques notions de méta-programmation en C++ Florian Galinier 24 novembre 2015
  2. 2. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Cette écriture abstraite : template <typename T> void f(T i) { std ::cout <<i<<std:: endl; }
  3. 3. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Correspond à cette écriture concrète : void f(int i) { std ::cout <<i<<std:: endl; } void f(float i) { std ::cout <<i<<std:: endl; } void f(char i) { std ::cout <<i<<std:: endl; } ...
  4. 4. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion (defun fibo (n) (if (or (= n 0) (= n 1)) 1.0 (+ (fibo (- n 1)) (fibo (- n 2))) ) )
  5. 5. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion template <int N> struct Fibo { static const long value = Fibo <N-1 >:: value + Fibo <N-2 >:: value; }; template <> struct Fibo <0>{ static const long value = 1; }; template <> struct Fibo <1> { static const long value = 1; };
  6. 6. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Pour quoi faire ? interface B { // ... } public class A<T extends B> { // ... }
  7. 7. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Comment faire en C++ ? interface B { // ... } public class A<T extends B> { // ... } ↓ class B { // ... }; template <class T> class A { static_assert (std:: is_base_of <B,T >:: value ,"Template parameter must be a subtype of B"); // ... };
  8. 8. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Pour quoi faire ? int main () { // Avec C sous -type de B A<B> b; // -> Ok A<C> c; // -> Ok A<D> d; // -> error: static assertion failed: Template parameter must be a subtype of B }
  9. 9. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Autre utilisation possible template <class T> class A { T a; void save () { if(std :: is_pointer <T >:: value) a->save (); else a.save (); } };
  10. 10. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Autre utilisation possible template <class T> class A { T a; void save () { if(std :: is_pointer <T >:: value) a->save (); else a.save (); } }; Ne compile pas
  11. 11. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Solution template <typename T, T val > struct integral_constant { // ... }; typedef integral_constant <bool , true > true_type; typedef integral_constant <bool , false > false_type;
  12. 12. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion Solution template <class T> class A { T a; void save(std :: true_type) {a->save ();} void save(std :: false_type) {a.save ();} void save () { this ->save(std:: integral_constant <bool ,std :: is_pointer <T >:: value >()); } };
  13. 13. Quelques notions de méta- programmation en C++ Florian Galinier Petits rappels Méta- programmation Spécialisation et récursion Assertion statique integral_constant Conclusion La méta-programmation en C++ c’est : • avec les templates... • ... et donc à la compilation ; • #include <type_traits> • bien plus encore !

×