Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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...
Nächste SlideShare
Wird geladen in …5
×

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

330 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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 !

×