SlideShare une entreprise Scribd logo
1  sur  13
Télécharger pour lire hors ligne
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
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;
}
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;
}
...
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)))
)
)
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;
};
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> {
// ...
}
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");
// ...
};
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
}
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 ();
}
};
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
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;
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 >());
}
};
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 !

Contenu connexe

Tendances

Langage C
Langage  CLangage  C
Langage Cjwilili
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage CFahad Golra
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage CFahad Golra
 
Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Fahad Golra
 
Seance 2 - Programmation en langage C
Seance 2 - Programmation en langage CSeance 2 - Programmation en langage C
Seance 2 - Programmation en langage CFahad Golra
 
Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NETAziz Darouichi
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage cEbrima NJIE
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
Exercices en langage c
Exercices en langage cExercices en langage c
Exercices en langage cDaoua Lotfi
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
Flutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packagesFlutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packagesEdouard Marquez
 
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...cppfrug
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp FrGregory Renard
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
exercices en C
exercices en Cexercices en C
exercices en Ccoursuniv
 

Tendances (20)

Langage C
Langage  CLangage  C
Langage C
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage C
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage C
 
Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Seance 3- Programmation en langage C
Seance 3- Programmation en langage C
 
Seance 2 - Programmation en langage C
Seance 2 - Programmation en langage CSeance 2 - Programmation en langage C
Seance 2 - Programmation en langage C
 
Cours Visual Basic.NET
Cours Visual Basic.NETCours Visual Basic.NET
Cours Visual Basic.NET
 
Le langage C
Le langage CLe langage C
Le langage C
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage c
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Exercices en langage c
Exercices en langage cExercices en langage c
Exercices en langage c
 
Theme2
Theme2Theme2
Theme2
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Flutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packagesFlutter : communication Android/iOS et les packages
Flutter : communication Android/iOS et les packages
 
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp Fr
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Serie2
Serie2Serie2
Serie2
 
exercices en C
exercices en Cexercices en C
exercices en C
 

En vedette

Exposicion De Informatica
Exposicion De InformaticaExposicion De Informatica
Exposicion De InformaticaDIANISCAT
 
Le carnet 1 4
Le carnet 1 4Le carnet 1 4
Le carnet 1 4sgwel
 
En busca de la vaca perdida mt
En busca de la vaca perdida mtEn busca de la vaca perdida mt
En busca de la vaca perdida mtmanuelagudo00
 
Evalution Question #1
Evalution Question  #1Evalution Question  #1
Evalution Question #1Tom Fox
 
CATALOGUE JOUETS NOEL 2014
CATALOGUE JOUETS NOEL 2014CATALOGUE JOUETS NOEL 2014
CATALOGUE JOUETS NOEL 2014fabrice kouadio
 
20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xd20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xdSocDemoFB
 
P R E S E N T A C I O N M I N E R I A 1
P R E S E N T A C I O N  M I N E R I A 1P R E S E N T A C I O N  M I N E R I A 1
P R E S E N T A C I O N M I N E R I A 1anita
 
Charte quality team version 5.0 2014
Charte quality team version 5.0 2014Charte quality team version 5.0 2014
Charte quality team version 5.0 2014Vip Agence
 
La camisa de l’home feliç
La camisa de l’home feliçLa camisa de l’home feliç
La camisa de l’home feliçjaristos07
 
Presentacion Del Algodon.
Presentacion Del Algodon.Presentacion Del Algodon.
Presentacion Del Algodon.anita
 
Réveil en Form' - UMONS - HAST - Thierry DUTOIT
Réveil en Form' - UMONS - HAST - Thierry DUTOITRéveil en Form' - UMONS - HAST - Thierry DUTOIT
Réveil en Form' - UMONS - HAST - Thierry DUTOITEasyNove
 
Réveil en Form' - Picarré - OSH - Pierre-Olivier BOURGE
Réveil en Form' - Picarré - OSH - Pierre-Olivier BOURGERéveil en Form' - Picarré - OSH - Pierre-Olivier BOURGE
Réveil en Form' - Picarré - OSH - Pierre-Olivier BOURGEEasyNove
 
La Informatica en la Salud
La Informatica en la SaludLa Informatica en la Salud
La Informatica en la Saludfparedesc
 

En vedette (20)

Exposicion De Informatica
Exposicion De InformaticaExposicion De Informatica
Exposicion De Informatica
 
EBULLISTIK-presentation
EBULLISTIK-presentationEBULLISTIK-presentation
EBULLISTIK-presentation
 
Le carnet 1 4
Le carnet 1 4Le carnet 1 4
Le carnet 1 4
 
En busca de la vaca perdida mt
En busca de la vaca perdida mtEn busca de la vaca perdida mt
En busca de la vaca perdida mt
 
Evalution Question #1
Evalution Question  #1Evalution Question  #1
Evalution Question #1
 
CATALOGUE JOUETS NOEL 2014
CATALOGUE JOUETS NOEL 2014CATALOGUE JOUETS NOEL 2014
CATALOGUE JOUETS NOEL 2014
 
20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xd20141128 demogr bxl_01_xd
20141128 demogr bxl_01_xd
 
P R E S E N T A C I O N M I N E R I A 1
P R E S E N T A C I O N  M I N E R I A 1P R E S E N T A C I O N  M I N E R I A 1
P R E S E N T A C I O N M I N E R I A 1
 
Proyecto Kambache
Proyecto KambacheProyecto Kambache
Proyecto Kambache
 
Charte quality team version 5.0 2014
Charte quality team version 5.0 2014Charte quality team version 5.0 2014
Charte quality team version 5.0 2014
 
Untitled
UntitledUntitled
Untitled
 
La camisa de l’home feliç
La camisa de l’home feliçLa camisa de l’home feliç
La camisa de l’home feliç
 
Tic Power Acabat!!!
Tic Power Acabat!!!Tic Power Acabat!!!
Tic Power Acabat!!!
 
PORTFOLIO LETTER
PORTFOLIO LETTERPORTFOLIO LETTER
PORTFOLIO LETTER
 
Presentacion Del Algodon.
Presentacion Del Algodon.Presentacion Del Algodon.
Presentacion Del Algodon.
 
Réveil en Form' - UMONS - HAST - Thierry DUTOIT
Réveil en Form' - UMONS - HAST - Thierry DUTOITRéveil en Form' - UMONS - HAST - Thierry DUTOIT
Réveil en Form' - UMONS - HAST - Thierry DUTOIT
 
Paint
PaintPaint
Paint
 
Réveil en Form' - Picarré - OSH - Pierre-Olivier BOURGE
Réveil en Form' - Picarré - OSH - Pierre-Olivier BOURGERéveil en Form' - Picarré - OSH - Pierre-Olivier BOURGE
Réveil en Form' - Picarré - OSH - Pierre-Olivier BOURGE
 
Un Abrazo
Un AbrazoUn Abrazo
Un Abrazo
 
La Informatica en la Salud
La Informatica en la SaludLa Informatica en la Salud
La Informatica en la Salud
 

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

Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Chapitre 9 - Les fonctions.pdf
Chapitre 9 - Les fonctions.pdfChapitre 9 - Les fonctions.pdf
Chapitre 9 - Les fonctions.pdfShiniGami0o0
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistVincent Agnus
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Laurent BUNIET
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)Tunisie collège
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Chapitre 3 - Généralités sur le langage C.pdf
Chapitre 3 - Généralités sur le langage C.pdfChapitre 3 - Généralités sur le langage C.pdf
Chapitre 3 - Généralités sur le langage C.pdfShiniGami0o0
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMALoic Yon
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 

Similaire à Quelques notions de méta-programmation en C++ (13)

Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Chapitre 9 - Les fonctions.pdf
Chapitre 9 - Les fonctions.pdfChapitre 9 - Les fonctions.pdf
Chapitre 9 - Les fonctions.pdf
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Langage c
Langage cLangage c
Langage c
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
POO-chapitre2.pptx
POO-chapitre2.pptxPOO-chapitre2.pptx
POO-chapitre2.pptx
 
Chapitre 3 - Généralités sur le langage C.pdf
Chapitre 3 - Généralités sur le langage C.pdfChapitre 3 - Généralités sur le langage C.pdf
Chapitre 3 - Généralités sur le langage C.pdf
 
Linq Tech Days08 Lux
Linq Tech Days08 LuxLinq Tech Days08 Lux
Linq Tech Days08 Lux
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 

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