Metaprogrammierung in C/C++
|
|
- Sara Rothbauer
- vor 6 Jahren
- Abrufe
Transkript
1 Metaprogrammierung in C/C++ Vortrag im WP Deeply Embedded Philipp Bandow Jakob Kasicz Orhan Aykac
2 Inhalt 1 Metaprogrammierung mit dem Präprozessor 2 Templates Einleitung Parameter und Typen Abhängige Namen Benutzung Explizite Spezialisierung Partielle Spezialisierung Beispiele 3 Code Bloat Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 2/83
3 Metaprogrammierung mit dem Präprozessor Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 3/83
4 Metaprogrammierung mit dem Präprozessor Sprachelemente stammen aus C Verwendbar auch in C++ Hauptsächlicher Einsatzzweck: Wiederholung oder Manipulation von bereits vorhandenem Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 4/83
5 Präprozessor Direktiven (C-Makros) Werden mit der #define Direktive erstellt Quellcode wird vom Präprozessor bearbeitet und alle mit #define erstellten Makros werden ersetzt Meistens werden Makros für Konstanten verwendet (eher in C als in C++), sie können aber auch verschachtelt werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 5/83
6 Einfache Makros (der Vollständigkeit halber) 1 # define NUM 42 2 # define STRING " ein String \n" cout << STRING << endl ; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 6/83
7 Mehrzeilige Makros Das \-Zeichen erlaubt es Makros, welche normalerweise Einzeiler sind, trotzdem in mehreren Zeilen zu schreiben Man sollte allerdings beachten, dass der Präprozessor die Makros trotzdem als Einzeiler verarbeitet 1 # define STRINGOUT cout << " Stringdingdong " \ 2 endl ; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 7/83
8 Parametersubstitution Makros dürfen ähnlich wie Funktionen parametriert werden Man kann an dem Beispiel erkennen das es KEINE Typüberprüfung gibt Es darf fast jedes Wort als Parameter übergeben werden, es dürfen allerdings keine, vorkommen, da diese die Parameter trennen! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 8/83
9 Parametersubstitution Makros dürfen ähnlich wie Funktionen parametriert werden Man kann an dem Beispiel erkennen das es KEINE Typüberprüfung gibt Es darf fast jedes Wort als Parameter übergeben werden, es dürfen allerdings keine, vorkommen, da diese die Parameter trennen! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 8/83
10 Parametersubstitution Makros dürfen ähnlich wie Funktionen parametriert werden Man kann an dem Beispiel erkennen das es KEINE Typüberprüfung gibt Es darf fast jedes Wort als Parameter übergeben werden, es dürfen allerdings keine, vorkommen, da diese die Parameter trennen! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 8/83
11 Klammern von Parametern Wie erwähnt ist eine Markodefinition eine reine Substitution, von daher ist gerade bei mathematischen Ausdrücken Vorsicht geboten und es ist gängige Praxis viel zu Klammern 1 # define SQRE1 (x) ((x) * (x)) 2 # define SQRE2 (x) (x * x) 1 int a= SQRE1 (5+1) ; // a= ((5+1) *(5+1) )= 36 2 int b= SQRE2 (5+1) ; // b= (5+1*5+1) = 11 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 9/83
12 Klammern von Parametern Wie erwähnt ist eine Markodefinition eine reine Substitution, von daher ist gerade bei mathematischen Ausdrücken Vorsicht geboten und es ist gängige Praxis viel zu Klammern 1 # define SQRE1 (x) ((x) * (x)) 2 # define SQRE2 (x) (x * x) 1 int a= SQRE1 (5+1) ; // a= ((5+1) *(5+1) )= 36 2 int b= SQRE2 (5+1) ; // b= (5+1*5+1) = 11 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 9/83
13 Klammern von Parametern Wie erwähnt ist eine Markodefinition eine reine Substitution, von daher ist gerade bei mathematischen Ausdrücken Vorsicht geboten und es ist gängige Praxis viel zu Klammern 1 # define SQRE1 (x) ((x) * (x)) 2 # define SQRE2 (x) (x * x) 1 int a= SQRE1 (5+1) ; // a= ((5+1) *(5+1) )= 36 2 int b= SQRE2 (5+1) ; // b= (5+1*5+1) = 11 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 9/83
14 Variadic Makros Variadic Makros sind Makros mit einer Parameterliste, diese ist Variabel und wird mit (...) angegeben. Die Übergabe findet mit dem vordefinierten VA ARGS Makro statt 1 # define ERROR (...) \ 2 printf (" file : %s, line : %d, error : ", ) \ 3 FILE, LINE, VA_ARGS ) 1 int main ( void ) { 2 ERROR (" Dies ist Fehler Nr %d", 100) ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 10/83
15 Variadic Makros Variadic Makros sind Makros mit einer Parameterliste, diese ist Variabel und wird mit (...) angegeben. Die Übergabe findet mit dem vordefinierten VA ARGS Makro statt 1 # define ERROR (...) \ 2 printf (" file : %s, line : %d, error : ", ) \ 3 FILE, LINE, VA_ARGS ) 1 int main ( void ) { 2 ERROR (" Dies ist Fehler Nr %d", 100) ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 10/83
16 Variadic Makros Variadic Makros sind Makros mit einer Parameterliste, diese ist Variabel und wird mit (...) angegeben. Die Übergabe findet mit dem vordefinierten VA ARGS Makro statt 1 # define ERROR (...) \ 2 printf (" file : %s, line : %d, error : ", ) \ 3 FILE, LINE, VA_ARGS ) 1 int main ( void ) { 2 ERROR (" Dies ist Fehler Nr %d", 100) ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 10/83
17 Der #-Operatror Wandelt einen Makroparameter in einen String um Darf nur innerhalb eines Makros verwendet werden Es ist jedoch nicht möglich den #-Operator auf einen Token anzuwenden 1 # define TOSTRING (a) #a 2 # define SOGEHTESNICHT # fehler cout << TOSTRING ( test string ) << endl // korrekt 5 cout << SOGEHTESNICHT << endl // fehler Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 11/83
18 Der ##-Operator Operator zu Konkatenation von 2 Token Darf ebenso nur in Makros verwendet werden Macht die Horizontale Iteration möglich. (zur Horizontalen Iteration später mehr) Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 12/83
19 Der ##-Operator Operator zu Konkatenation von 2 Token Darf ebenso nur in Makros verwendet werden Macht die Horizontale Iteration möglich. (zur Horizontalen Iteration später mehr) Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 12/83
20 Der ##-Operator Operator zu Konkatenation von 2 Token Darf ebenso nur in Makros verwendet werden Macht die Horizontale Iteration möglich. (zur Horizontalen Iteration später mehr) Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 12/83
21 Verschachtelte Makros Makros lassen sich beliebig verschachteln Es muss darauf geachtet werden, dass nur von oben nach unten verschachtelt werden kann Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 13/83
22 Verschachtelte Makros Makros lassen sich beliebig verschachteln Es muss darauf geachtet werden, dass nur von oben nach unten verschachtelt werden kann Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 13/83
23 Baumstruktur des Makros Baumstruktur Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 14/83
24 Primitive horizontale Iteration Dient dazu bestimmten Code zu expandieren Ist ein recht unflexiebles, dafür simples Konzept Die gesamte Expansion geschieht einzeilig, daher der der Begriff Horizontale Expansion Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 15/83
25 Primitive horizontale Iteration Dient dazu bestimmten Code zu expandieren Ist ein recht unflexiebles, dafür simples Konzept Die gesamte Expansion geschieht einzeilig, daher der der Begriff Horizontale Expansion Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 15/83
26 Primitive horizontale Iteration Dient dazu bestimmten Code zu expandieren Ist ein recht unflexiebles, dafür simples Konzept Die gesamte Expansion geschieht einzeilig, daher der der Begriff Horizontale Expansion Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 15/83
27 Horizontale Iteration Bringt die einfache horizontale Iteration auf ein höheres Level der Allgemeingültigkeit Die Idee ist ein Makro an einen allgemeinen Iterationsprozess zu bergeben Strebt nach dem Konzept der Wiederverwendbarkeit von Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 16/83
28 Horizontale Iteration Bringt die einfache horizontale Iteration auf ein höheres Level der Allgemeingültigkeit Die Idee ist ein Makro an einen allgemeinen Iterationsprozess zu bergeben Strebt nach dem Konzept der Wiederverwendbarkeit von Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 16/83
29 Horizontale Iteration Bringt die einfache horizontale Iteration auf ein höheres Level der Allgemeingültigkeit Die Idee ist ein Makro an einen allgemeinen Iterationsprozess zu bergeben Strebt nach dem Konzept der Wiederverwendbarkeit von Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 16/83
30 Lokale Iteration Ist ein Konzept um die enzeilige Expansion der vorherigen Kozepte zu umgehen Das Prinzip beruht auf der Auslagerung der Iterationsschritte, welche mit #if #endif definiert sind und auf unterschiedlichen Zeilen liegen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 17/83
31 Lokale Iteration Ist ein Konzept um die enzeilige Expansion der vorherigen Kozepte zu umgehen Das Prinzip beruht auf der Auslagerung der Iterationsschritte, welche mit #if #endif definiert sind und auf unterschiedlichen Zeilen liegen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 17/83
32 Datei Iteration & Selbst Iteration Die Datei Iteration unterscheidet sich zur lokalen Iteration ansich nur dadurch, dass kein Makro expandiert wird, sondern in jedem Iterationsschritt eine Datei inkludiert wird Die Selbst Iteration lässt sich als Variante der Datei Iteration verstehen. Dabei befindet sich der Code nicht in einer zusätzlichen Datei, sondern innerhalb der Datei, in der die Iteration initialisiert wird. Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 18/83
33 Datei Iteration & Selbst Iteration Die Datei Iteration unterscheidet sich zur lokalen Iteration ansich nur dadurch, dass kein Makro expandiert wird, sondern in jedem Iterationsschritt eine Datei inkludiert wird Die Selbst Iteration lässt sich als Variante der Datei Iteration verstehen. Dabei befindet sich der Code nicht in einer zusätzlichen Datei, sondern innerhalb der Datei, in der die Iteration initialisiert wird. Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 18/83
34 Inhalt 1 Metaprogrammierung mit dem Präprozessor 2 Templates Einleitung Parameter und Typen Abhängige Namen Benutzung Explizite Spezialisierung Partielle Spezialisierung Beispiele 3 Code Bloat Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 19/83
35 Template Einleitung Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 20/83
36 Ein Template ist eine Mustervorlage Semantisch gleichartige Funktionen/Klassen mit Verschiedenen Parametertypen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 21/83
37 Beispiel: Funktion, die einen int Parameter ausgibt 1 void printdata ( int value ) { 2 std :: cout << " The value is: " << value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 22/83
38 Beispiel: Funktion, die einen double Parameter ausgibt 1 void printdata ( double value ) { 2 std :: cout << " The value is: " << value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 23/83
39 Lösung: Template 1 template < typename T > 2 void printdata ( T value ) { 3 std :: cout << " The value is: " << value << std :: endl ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 24/83
40 Beispiel 1 int i = 3; 2 double d = 4. 75; 3 std :: string s(" Hallo "); 4 bool b = false ; 5 printdata (i); // The value is: 3 6 printdata (d); // The value is: printdata ( s); // The value is: Hallo 8 printdata ( b); // The value is: false Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 25/83
41 Parameter und Typen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 26/83
42 Definition Beginnt mit dem Schlüsselwort template, hiernach folgt eine Liste von Template Parametern Darauf folgt eine Funktions- oder Klassen-Definition Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 27/83
43 Parameter Typen Werte Template 1 template < typename T > 2 function (...) {...} Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 28/83
44 Template Type Parameter Templates, die sich auf einen Type beziehen 1 template < typename T1 > 2 class MyClass {...}; 1 template < class T1 > 2 class MyClass {...}; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 29/83
45 Template Type Parameter 1 template < typename T > 2 void func ( T value ) { 3 const T& ref = value ; 4 T* p = new T; 5 T temp (23) ; 6 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 30/83
46 Generierter Code für func<int>: 1 void func ( int value ) { 2 const int & ref = value ; 3 int * p = new int ; 4 int temp (23) ; 5 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 31/83
47 Template Non-Type Parameter Parameter sind compile-time constants Syntax ähnlich einer Variablen-Deklaration Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 32/83
48 Template Non-Type Parameter 1 template < int i> 2 class A {...}; 1 template < double * dp > 2 class B {...}; 1 template < void (* func )( int )> 2 void c() {...} Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 33/83
49 Template Non-Type Parameter 1 A <3 > a3; 1 A< sizeof ( std :: string )> as; 1 double d; 2 B <&d> bpd ; 3 B<NULL > bn; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 34/83
50 Template Non-Type Parameter 1 void myfunc ( int i); 2 struct MyClass { 3 static void staticfunc ( int i); 4 }; 1 int main ( void ) { 2 c <& myfunc >() ; 3 c <& MyClass :: staticfunc >() ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 35/83
51 Template Template Parameter Ermöglicht einem Template ein anderes Template als Parameter hinzuzufügen Eine Klasse, die mehrere collections enthält, bietet dem Nutzer die Möglichkeit, den Type der collection zu bestimmen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 36/83
52 Template Template Parameter 1 template < template < typename T > class ContainerType > 2 class MyClass { 3 ContainerType < int > intcontainer ; 4 ContainerType < std :: string > stringcontainer ; }; 1 MyClass < vector > v; 2 MyClass <list > l; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 37/83
53 Default Template Parameter Genau wie Funktionen können auch Template default Parameter haben Wenn ein Template einen default Parameter hat, müssen alle nachfolgenden Parameter auch default Werte haben Bei der Referenzierung können die Parameter weggelassen werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 38/83
54 Default Template Parameter 1 template < typename T1, typename T2 = int, int i = 23 > 2 class MyClass {}; 1 MyClass < double, std :: string, 46 > mc1 ; // Alle Parameter spezifiziert 2 MyClass < std :: string, double > mc2 ; // i weggelasssen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 39/83
55 Default Template Parameter 1 template < typename T1, typename T2 = int, int i = 23 > 2 class MyClass {}; 1 MyClass < std :: string, double, 23 > mc3 ; // Normal 2 MyClass < int > mc4 ; // alle default 3 MyClass < int, int, 0 > mc5 ; // T2 muss spezifiert werden, wenn wir i spezifieren Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 40/83
56 Abhängige Namen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 41/83
57 Abhängig Namen sind jegliche Namen in der Template Definition, die von einem Template Parameter abhängen Werden nur bei der Initialisierung aufgelöst Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 42/83
58 1 struct X { 2 int x; 3 typedef double Z; 4 }; 5 struct Y { 6 typedef int x; 7 double Z; 8 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 43/83
59 1 template < typename T > 2 struct ZZ { 3 T::Z z1; // Falsch 4 typename T::Z z2; // OK 5 6 void func (T& t) { 7 t. x = 4; // OK, referenziert ein Objekt 8 } 9 10 typedef typename std :: vector <T >:: iterator VecIt ; // OK 11 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 44/83
60 1 int main () { 2 X x; 3 Y y; 4 5 ZZ <X> zzx ; // OK, X::Z ist ein Typ 6 ZZ <Y > zzy ; // Falsch, Y:: Z ist ein Objekt 7 8 zzx. func (x); // OK, X::x ist ein Objekt 9 zzy. func (y); // Falsch, Y::x ist ein Typ 10 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 45/83
61 Benutzung von Templates Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 46/83
62 1 template < typename T, unsigned i > 2 struct FixedArray { 3 T data [i]; 4 }; 1 FixedArray < int, 3 > a; // Array vom Typ int mit 3 Elementen 2 FixedArray < int, 1+6/3 > // Array vom Typ int mit 3 Elementen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 47/83
63 1 template < typename T, unsigned i > 2 struct FixedArray { 3 T data [i]; 4 }; 1 FixedArray < int, 3 > a; // Array vom Typ int mit 3 Elementen 2 FixedArray < int, 1+6/3 > // Array vom Typ int mit 3 Elementen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 47/83
64 1 template < template < typename T, typename Allocator > class Container > 2 struct ContainerPair { 3 Container <int, std :: allocator <int > > intcontainer ; 4 Container < std :: string, std :: allocator < std :: string > > stringcontainer ; 5 }; 1 ContainerPair < std :: deque > deqcont ; // zwei std :: deques 2 ContainerPair < std :: vector > veccont ; // zwei std :: vectors Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 48/83
65 1 template < template < typename T, typename Allocator > class Container > 2 struct ContainerPair { 3 Container <int, std :: allocator <int > > intcontainer ; 4 Container < std :: string, std :: allocator < std :: string > > stringcontainer ; 5 }; 1 ContainerPair < std :: deque > deqcont ; // zwei std :: deques 2 ContainerPair < std :: vector > veccont ; // zwei std :: vectors Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 48/83
66 Spezifikation der Template Parameter 1 template < typename T > 2 void func () {...} 1 int main ( void ) { 2 func <int >() ; 3 func < double >() ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 49/83
67 Spezifikation der Template Parameter 1 template < typename T > 2 void func () {...} 1 int main ( void ) { 2 func <int >() ; 3 func < double >() ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 49/83
68 Automatische Template Argument Erkennung 1 template < typename T > 2 void func (T val ) {} 3 4 template < typename T, typename U > 5 void func2 ( U val ) { 6 return T( val ); 7 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 50/83
69 Automatische Template Argument Erkennung 1 int main ( void ) { 2 // T= int 3 func (3) ; 4 // T= double 5 func (3.5) 6 7 // T=int, U= double 8 func2 <int >(3.5) ; 9 // T= std :: vector < std :: string >, U= int 10 func2 < std :: vector < std :: string > >(5); 11 // T und U spezifiziert ; T = std :: vector < std :: string >, U= int 12 func2 < std ::: vector < std :: string >, int >(5.7) ; 13 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 51/83
70 Explizite Spezialisierung Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 52/83
71 Templates können nicht einfach überladen werden Problematisch bei allgemein gehaltenen Templates 1 template < typename T > 2 void func ( T value ) { 3 value. add (3) ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 53/83
72 1 class T1 { 2 public : 3 void add ( int i, double d = 0. 0) ; 4 } 5 class T2 { 6 public : 7 std :: string add ( double d); 8 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 54/83
73 1 class T3 { 2 public : 3 void Add ( int i); 4 } Template func nicht nutzbar für T3 Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 55/83
74 Lösung: Explizite Spezialisierung für T3 1 template <> 2 void func <T3 >( T3 value ) { 3 value. Add (3) ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 56/83
75 Unterschiede zur normalen Template Deklaration leere Template Parameter Liste spezialisierte Template Parameter Liste nach dem Funktionsnamen Compiler Template ist spezialisiert Welche Parameter zu der Spezialisierung gehören Kann für Klasssen- und Funktionstemplates verwendet werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 57/83
76 1 template < typename T > 2 class X { 3 X(T x); 4 }; template < > 7 classx < std :: string > { 8 X( const std :: string & s); 9 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 58/83
77 Rekursive Klassen Templates 1 template < unsigned i > 2 struct Fibonacci { 3 static const unsigned result = Fibonacci <i -1 >:: result + Fibonacci <i -2 >:: result ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 59/83
78 Rekursive Klassen Templates 1 template < > 2 struct Fibonacci <0 > { 3 static const unsigned result = 1; 4 }; 5 template < > 6 struct Fibonacci <1 > { 7 static const unsigned result = 1; 8 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 60/83
79 Rekursive Klassen Templates 1 int main ( void ) { 2 std :: cout << Fibonacci <5 >:: result << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 61/83
80 Partielle Spezialisierung Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 62/83
81 Erlaubt es, ein Template für einen Teil der Parameter zu spezialisieren 1 template < typename T, typename U > 2 struct SameType { 3 static const bool result = false ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 63/83
82 1 template < typename T, typename U > 2 struct SameType { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct SameType <T, T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 64/83
83 1 template < typename T, typename U > 2 struct SameType { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct SameType <T, T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 64/83
84 1 int main ( void ) { 2 std :: cout << "Is int of the same type as double?" << () SameType <int, double >:: result? " Yes " : "No") << std :: endl ; 3 std :: cout << "Is double of the same type as double?" << () SameType < double, double >:: result? " Yes " : "No") << std :: endl ; 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 65/83
85 1 template < typename T > 2 struct IsConst { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsConst < const T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 66/83
86 1 template < typename T > 2 struct IsConst { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsConst < const T > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 66/83
87 1 template < typename T > 2 struct IsVector { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsVector < std :: vector <T > > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 67/83
88 1 template < typename T > 2 struct IsVector { 3 static const bool result = false ; 4 }; 1 template < typename T > 2 struct IsVector < std :: vector <T > > { 3 static const bool result = true ; 4 }; Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 67/83
89 Funktions Template Überladung Es ist nicht möglich, Funktions Templates partiell zu spezialisieren Man kann aber Funktions Templates überladen Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 68/83
90 Funktions Template Überladung 1 template < typename T > 2 void swap (T& lhs, T& rhs ) { 3 T temp ( lhs ); 4 lhs = rhs ; 5 rhs = temp ; 6 } Performance Nachteil bei großen Objekten Es wird ein neues Objekt erstellt und 3x kopiert Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 69/83
91 Funktions Template Überladung 1 template < typename T > 2 void swap (T& lhs, T& rhs ) { 3 T temp ( lhs ); 4 lhs = rhs ; 5 rhs = temp ; 6 } Performance Nachteil bei großen Objekten Es wird ein neues Objekt erstellt und 3x kopiert Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 69/83
92 Funktions Template Überladung 1 class ExpensiveToCopy { 2 public : 3 void swap ( ExpensiveToCopy & other ); 4 }; 1 template < > 2 void swap < ExpensiveToCopy >( ExpensiveToCopy & lhs, ExpensiveToCopy & rhs ) { 3 lhs. swap ( rhs ); 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 70/83
93 Funktions Template Überladung 1 class ExpensiveToCopy { 2 public : 3 void swap ( ExpensiveToCopy & other ); 4 }; 1 template < > 2 void swap < ExpensiveToCopy >( ExpensiveToCopy & lhs, ExpensiveToCopy & rhs ) { 3 lhs. swap ( rhs ); 4 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 70/83
94 Beispiele Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 71/83
95 1 int factorial ( int n) { 2 return ( n ==0)? 1 : n * factorial ( n -1) ; 3 } 1 int main () { 2 std :: cout << factorial ( 15) << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 72/83
96 1 int factorial ( int n) { 2 return ( n ==0)? 1 : n * factorial ( n -1) ; 3 } 1 int main () { 2 std :: cout << factorial ( 15) << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 72/83
97 1 template < int N> 2 struct Factorial { 3 enum { value = N * Factorial <N -1 >:: value }; 4 }; 5 template < > 6 Factorial <1 > { 7 enum { value = 1 }; 8 }; 1 int main () { 2 std :: cout << Factorial <15 >:: value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 73/83
98 1 template < int N> 2 struct Factorial { 3 enum { value = N * Factorial <N -1 >:: value }; 4 }; 5 template < > 6 Factorial <1 > { 7 enum { value = 1 }; 8 }; 1 int main () { 2 std :: cout << Factorial <15 >:: value << std :: endl ; 3 } Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 73/83
99 Inhalt 1 Metaprogrammierung mit dem Präprozessor 2 Templates Einleitung Parameter und Typen Abhängige Namen Benutzung Explizite Spezialisierung Partielle Spezialisierung Beispiele 3 Code Bloat Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 74/83
100 In C++ wird das dynamic dispatching für Template Funktionen nicht direkt unterstützt Generische Algorithmen müssen zur Compile-Zeit für jeden Typ das Template instanziieren Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 75/83
101 Das führt zu sogenanntem code bloat bzw. template bloat code bloat ist bei dem Design von generischen Bibliotheken ein großes Thema Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 76/83
102 Ein Verfahren, dass versucht, code bloat bei Templates in den Griff zu bekommen ist template hoisting Beim template hoisting wird ein Template in eine generische Basis Klasse und nicht generische Kind Klassen aufgeteilt Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 77/83
103 Ein weiteres Verfahren ist, für verschiedene Algorithmen Typen zu vereinheitlichen type reduction Die Vereinheitlichung gilt dann NUR für diesen Algorithmus Beispiel: Ein RGB-Bild soll in ein BGR-Bild kopiert werden Das BGR Bild wird durch um-mapping der Farbkanäle in ein Pseudo-RGB Bild konvertiert Somit muss nur noch die Kopierfunktion für RGB RGB geschrieben werden Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 78/83
104 Bei solchen Techniken ist Vorsicht geboten, da sie häufig aus unsicheren casts aufbauen Zu Beachten ist, dass unterschiedliche Algorithmen unterschiedliche Vereinheitlichungen erlauben Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 79/83
105 Durch dieses Verfahren wird der Laufzeit-Nachteil in einen Compile-Zeit Nachteil umfunktioniert Der Code wird kleiner, die Compile-Zeit größer Generell entstehen bei exzessiver Template Programmierung oftmals viele Instanz mit ähnlichem bis fast vollständig identischem Code Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 80/83
106 Quellen C++ Metaprogrammierung - Sebastion Otte - Fachhochsule Wiesbaden Introduction to C++ Templates - Anthony Williams Efficient Run-Time Dispatching in Generic Programming with Minimal Code Bloat - Lubomir Bourdev & Jaakko Järvi Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 81/83
107 Fragen? Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 82/83
108 Vielen Dank für Ihre Aufmerksamkeit! Metaprogrammierung in C/C++ Philipp Bandow, Jakob Kasicz, Orhan Aykac 83/83
Programmieren in C++ Templates
Programmieren in C++ Templates Inhalt Templates Funktions- und Klassen-Templates Spezialisierung von Templates Generische Klassen Einbinden von Templates Instantiierung (implizit und explizit) Templates
MehrProblem: Vererbung erlaubt die Wiederverwendung d von Programmcode, virtuelle Funktionen ermöglichen dabei den Austausch gewisser Funktionalität
Problem: Vererbung erlaubt die Wiederverwendung d von Programmcode, virtuelle Funktionen ermöglichen dabei den Austausch gewisser Funktionalität Vererbung erlaubt NICHT die Wiederverwendung durch Parametrisierung
MehrPraxisorientierte Einführung in C++ (Variadische Funktionen)
Praxisorientierte Einführung in C++ (Variadische Funktionen) Christoph Elbrechter, Florian Paul Schmidt Universität Bielefeld April 12, 2012 Christoph Elbrechter, Florian Paul Schmidt Praxisorientierte
MehrDie Anwesenheitspflicht beim Seminar gilt für diejenigen Teilnehmer, die einen Schein erwerben wollen. Für die Nachmittagsübungen gilt keine
1 2 Die Anwesenheitspflicht beim Seminar gilt für diejenigen Teilnehmer, die einen Schein erwerben wollen. Für die Nachmittagsübungen gilt keine Anwesenheitspflicht; d.h. die Teilnehmer dürfen sie gerne
Mehrvariadic templates Templates mit variabler Argumentanzahl?
Templates mit variabler Argumentanzahl? bislang in C++98 nicht direkt möglich, stattdessen (geniale Idee von A. Alexandrescu): Typlisten template struct Typelist {!typedef T Head;!typedef
Mehrkurze Wiederholung class templates
kurze Wiederholung class templates Ein class template ist ein Template, dass mit einem oder mehreren typename -Parametern implementiert wird. Um solch ein Template zu benutzen, übergibt man dem Template
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
MehrDAP2-Programmierpraktikum Einführung in C++ (Teil 2)
DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und
MehrWintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29
Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente
MehrPolymorphismus 44. Function.hpp. #include <string>
Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class
MehrC++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.
C++ Klassen, Vererbung Philipp Lucas phlucas@cs.uni-sb.de Sebastian Hack hack@cs.uni-sb.de Wintersemester 2008/09 saarland university computer science 1 Inhalt Klassen in C++ Sichtbarkeit Erzeugen von
MehrCrashkurs C++ Wiederholung
Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i
Mehr4. Objektorientierte Programmierung mit C++
4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
MehrProgrammierkurs C++ Templates & STL (1/2)
Programmierkurs C++ Templates & STL (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Templates Die wichtigsten objekt-orientierten
MehrContainer/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt.
Templates Container/ Collection: Klasse die (Pointer auf ) andere Klassen oder Typen int,char,bool etc. aufnimmt. Bsp.: einfach verkettete Liste Data Data Data Data Jeder Datenknoten nimmt ein Datenobjekt
MehrGrundlagen der Informatik 12. Strukturen
12. Strukturen Strukturen und deren Komponenten Strukturen im Projekt Dynamisch erstellte Strukturen Strukturen und Operatoren Strukturen und Funktionen Einfach verkettete Liste Grundlagen der Informatik
MehrC++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation
C++ Templates Wozu Templates? Definition von Templates Gebrauch von Templates Instanziierung und Organisation Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik Martin-Luther-Universität
MehrFortgeschrittene Template-Techniken 295
Fortgeschrittene Template-Techniken 295 C++ bietet eine Vielfalt weiterer Techniken für Templates: Templates können auch außerhalb von Klassen für einzelne Funktionen verwendet werden. Templates können
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case
MehrK Ergänzungen zur Einführung in C
K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K.1 Zeiger, Felder und Zeichenketten Zeichenketten sind Felder von Einzelzeichen (char), die in der internen Darstellung durch ein \0
Mehrinitializer lists (nicht für Referenzen... unklar warum...)
initializer lists (nicht für Referenzen... unklar warum...) 1 class Y{ y ; Y &ref (y) ; // ok Y &ref {y ; // Fehler: g++, MS VS C++11 47 preventing narrowing int x = 7.3; // Ouch! void f(int); f(7.3);
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrFACHHOCHSCHULE MANNHEIM
für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen
MehrProgrammieren - C++ Templates
Programmieren - C++ Templates Reiner Nitsch 8471 reiner.nitsch@h-da.de Was sind Funktionstemplates? C++ unterscheidet zwischen Funktionstemplates (dieses Kapitel) und Klassentemplates (später). Funktionstemplates
MehrDynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
MehrObjektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default
Mehr12/18/12 // POST: values of a and b are interchanged void swap (int& a, int& b) { int c = a; a = b; b = c;
Generische Funktionalität Generisches Programmieren Template-Funktionen, Template- Klassen, generisches Sortieren, Fibonacci- und Ackermann-Zahlen zur Kompilierungszeit n Viele Funktionen braucht man für
Mehr7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});
S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht
MehrPolymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
MehrC++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16
C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming
MehrObjektorientierte Programmierung II
Objektorientierte Programmierung II OOP I Erlaubt Entwicklers, im Problemraum zu denken und zu arbeiten. Das Problem wird in eine Menge von Objekten zerlegt. Objekte wirken aufeinander, um das Problem
MehrVariablen und Parameter
D3kjd3Di38lk323nnm Variablen und Parameter Eine Variable repräsentiert einen Speicherbereich, der einen veränderbaren Wert enthält. Eine Variable kann eine lokale Variable, ein Parameter (value, ref oder
MehrPVK Informatik I 1.Teil. Grundlagen Variablen Operatoren Fallunterscheidung Schleifen Kurzschreibweise Pointer Array Dynamische Strukturen Funktionen
PVK Informatik I 1.Teil Grundlagen Variablen Operatoren Fallunterscheidung Schleifen Kurzschreibweise Pointer Array Dynamische Strukturen Funktionen 1 Grundlagen #include #include using
MehrEinführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz
Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public
MehrC++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008
Überblick 1 Allgemein C++ Templates - eine kleine Einführung Fabian Scheler, Peter Ulbrich, Niko Böhm Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)
MehrCentrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger. Musterlösung 9
Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger Musterlösung 9 // Header - Datei CisWstring. hpp # ifndef CISWSTRING_ HPP_ # define CISWSTRING_
MehrProgrammieren - C++ Funktions-Templates
Programmieren - C++ Funktions-Templates Reiner Nitsch 8471 r.nitsch@fbi.h-da.de Was sind Templates? C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen
MehrLösung der OOP-Prüfung WS12/13
2.1.2013 Lösung der OOP-Prüfung WS12/13 1. Aufgabe a) Da der Konstruktor im protected-bereich steht, können keine eigenständigen Objekte der Klasse angelegt werden. Durch den protected-konstruktor wird
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,
MehrC++ Templates - eine kleine Einführung
C++ Templates - eine kleine Einführung Peter Ulbrich, Martin Hoffmann Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de
MehrProgrammieren in Java
Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics
MehrPolymorphe for-anweisung 237
Polymorphe for-anweisung 237 Beginnend mit C++11 wird for (for-range-declaration : expression) statement durch den Übersetzer zu folgendem Programmtext expandiert: { auto&& range = (expression); for (auto
MehrUnterlagen. CPP-Uebungen-08/
Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen
MehrC++ - Objektorientierte Programmierung Konstruktoren und Destruktoren
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrC++ Klassen weitere Funktionen
C++ Klassen weitere Funktionen Übersicht static Elemente const Elemente Zusätzliches zu Konstruktoren Kopier-Konstruktor Konvertierung-Konstruktor Initialisierungslisten Friend Funktionen 2 Statische Klassenkomponenten
MehrFunktionen: Rückgabewert
Funktionen: Rückgabewert Jede Funktion in C++ (außer Konstruktoren und Destruktoren siehe später) MUSS einen Rückgabewert-Typ vereinbaren. Gibt sie nichts zurück, muss der Rückgabetyp void sein. Jede return-anweisung
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf
MehrC++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16
C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,
MehrModellierung und Programmierung 1
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 9. Dezember 2015 Wiederholung Referenzdatentypen reference [0] M datatype
MehrEin kleiner Blick auf die generische Programmierung
TgZero Technik.Blosbasis.net June 3, 2013 1 Inhaltsverzeichnis 1 Vorwort 3 2 Ein kleines Beispiel 3 3 Templates 3 4 Verschiedene Datentypen 4 5 Variadic Templates 5 6 Unterschied zwischen den Programmiersprachen
MehrC++ Quellcodes zum Buch Kapitel 5
1 HARALD NAHRSTEDT C++ für Ingenieure Einführung in die objektorientierte Programmierung Erstell am 27.04.2009 C++ Quellcodes zum Buch Kapitel 5 Beschreibung Diese Seiten enthalten den Quellcode aus dem
MehrKonstruktor/Destruktor
1/23 Konstruktor/Destruktor Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/23 Outline 1 2 3/23 Inhaltsverzeichnis 1 2
MehrFortgeschrittene Template-Techniken 350
Fortgeschrittene Template-Techniken 350 C++ bietet eine Vielfalt weiterer Techniken für Templates: Templates können auch außerhalb von Klassen für einzelne Funktionen verwendet werden. Templates können
Mehr1 Einleitung Generizität Syntax... 2
Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 1 1.1 Generizität................................ 1 1.2 Syntax.................................. 2 2 Realisierung 2 2.1 Compilierung generischer Klassen...................
MehrC/C++ Programmierung
1 C/C++ Programmierung Grundlagen: Der Präprozessor Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Der Präprozessor
MehrPraxis der Programmierung
Arrays, Pointerarithmetik, Konstanten, Makros Institut für Informatik und Computational Science Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Arrays (Felder/Vektoren) 2 Arrays: Motivation
MehrC++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!
Hello world! Java class HelloWorld { static public void main(string args) { System.out.println("Hello World!"); } } C #include main() { printf("hello World!\n"); } C++ #include using
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage
HSR Rapperswil 2001 Markus Rigling Programmieren: Exceptions 1 1. Auflage Inhaltsverzeichnis: 1. Was sind Exceptions?... 3 2. Struktur des Exception Handling... 3 3. Try-Block... 4 4. Exception Handler
MehrProgrammieren in Java
Programmieren in Java Vorlesung 11: Generic Methods Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 15 Inhalt
MehrProgrammierkurs. Steffen Müthing. December 7, Interdisciplinary Center for Scientific Computing, Heidelberg University
Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University December 7, 2018 Code Reuse Motivation Konzepte Vererbung (Idee) Templates Worum geht es? Datenstrukturen
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage
HSR Rapperswil 2001 Markus Rigling Programmieren: Templates 1 1. Auflage Inhaltsverzeichnis: Templates.1 1. Verwendung 3 2. Erstellen einer Templateklasse. 3 3. Faustregel zum Erstellen eines Klassentemplates..
MehrName: Klausur Informatik III WS 2003/04
1 : Methodenimplementierung ca. 42 Punkte Gegeben ist die Klasse Mitarbeiter. Listing 1: (./Code1/Mitarbeiter.h) using namespace std; // globale Variable fuer Ausgabedatei // kann entsprechend
MehrMartin Unold INFORMATIK. Geoinformatik und Vermessung
Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen
MehrRepetitorium Programmieren I + II
Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatorüberladung 2 Pointer Zeigervariable 3 CopyConstructor 4 Listen 5 Array String 6 STL Container
MehrProseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef
Proseminar C-Programmierung Grundlagen und Konzepte Der Präprozessor von: Svenja Neef Inhaltsverzeichnis 1Der C-Präprozessor...2 1.1Was ist der C-Präprozessor...2 1.2Präprozessor-Befehle...2 1.2.1Zusammenführen
MehrC++ Templates - eine kleine Einführung. Allgemein. Funktionstemplates. Allgemein. Funktionstemplates. Klassentemplates
Überblick C++ Templates - eine kleine Einführung Fabian Scheler, Peter Ulbrich, Niko Böhm Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)
MehrInformatik I (D-ITET)
Ablauf Informatik I (D-ITET) Übungsstunde 5, 26.10.2009 simonmayer@student.ethz.ch ETH Zürich Nachbesprechung Übung 3 Besprechung/Vertiefung der Vorlesung [21.10.2009] Vorbesprechung Übung 5 2.c) Test
MehrC++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16
C++ Teil 5 Sven Groß 16. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 16. Nov 2015 1 / 16 Themen der letzten Vorlesung Namensräume Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung
MehrInformatik. Strukturen und Aufzählungstypen. Vorlesung
Informatik Vorlesung 06 Strukturen und Aufzählungstypen 03. Dezember 2018 WiSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Datentypen Die bisher benutzten Datentypen waren
MehrEinführung in die STL
1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung
MehrMapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.
Mapra: C++ Teil 4 Felix Gruber IGPM, RWTH Aachen 6. Mai 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mai 2015 1 / 22 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien
MehrC++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue
C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung
Mehr16. Structs und Klassen I. Rationale Zahlen, Struct-Definition, Operator-Überladung, Datenkapselung, Klassen-Typen
491 16. Structs und Klassen I Rationale Zahlen, Struct-Definition, Operator-Überladung, Datenkapselung, Klassen-Typen Rechnen mit rationalen Zahlen 492 Rationale Zahlen (Q) sind von der Form n d mit n
MehrFunktionen in Python
Funktionen in Python Prof. Dr. Rüdiger Weis Beuth Hochschule für Technik Berlin 1 / 31 1 def Anweisung 2 Argumentübergabe 3 Lokale Variablen 4 Default Argumente 5 Aufruf mit Schlüsselwort 6 Variable Argumente
MehrInformatik I (D-ITET)
Informatik I (D-ITET) Übungsstunde 2, 5.10.2009 ETH Zürich? Übungsgruppenwechsel? Abgabe der Übungen... Bis Mo, 24:00 Theorie: Programme: per mail oder auf Papier.cpp Datei per mail Bin euch noch Demos
MehrC++ - Objektorientierte Programmierung Polymorphie
C++ - Objektorientierte Programmierung Polymorphie hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen C++ - Objektorientierte Programmierung 21.06.16 Seite 1 Polymorphie
Mehr2. Unterprogramme und Methoden
2. Unterprogramme und Methoden Durch Methoden wird ausführbarer Code unter einem Namen zusammengefasst. Dieser Code kann unter Verwendung von sogenannten Parametern formuliert sein, denen später beim Aufruf
MehrSyntax und Kontrollstrukturen
Syntax und Kontrollstrukturen Praktikum C-Programmierung Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg 2018-10-29
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrThemen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen
Themen der Übung 1 Organisatorisches Methoden und Wrapperklassen 2 Methoden 3 Wrapper-Klassen CoMa-Übung IV TU Berlin 07.11.2012 Organisatorisches: Im Pool nur auf die Abgabeliste setzen, wenn ihr wirklich
Mehr17. Klassen. Datenkapselung, Klassen, Memberfunktionen, Konstruktoren
556 17. Klassen Datenkapselung, Klassen, Memberfunktionen, Konstruktoren Ein neuer Typ mit Funktionalität... 557 struct rational { int n; int d; // INV: d!= 0 // POST: return value is the sum of a and
MehrProgrammierkurs. SoSe Markus Geveler Inst. f. Applied Mathematics, TU Dortmund.
Programmierkurs SoSe 2013 Markus Geveler Inst. f. Applied Mathematics, TU Dortmund markus.geveler@math.tu-dortmund.de Lesson 5 Was machen wir heute hier? weiter mit Objektorientierter Programmierung viel
MehrTag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)
MehrNeuere Sprachelemente in Java
Softwaretechnik 1 Vorlesung Neuere Sprachelemente in Java Prof. Dr. Bernhard Rumpe Technische Universität Braunschweig http://www.sse.cs.tu-bs.de/ Seite 2 Neuerungen seit Java 5.0 Java Spracherweiterungen
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrKlassenvariablen, Klassenmethoden
Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden
MehrLambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen
Lambda-Funktionen Lambda-Funktionen sind Funktionen ohne Namen. definieren ihre Funktionalität an Ort und Stelle. können wie Daten kopiert werden. können ihren Aufrufkontext speichern. Lambda-Funktionen
MehrGrundlagen. Die Komponenten eines C Programms. Das erste Programm
Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen
MehrHerzlich willkommen!
Programmiertechnik 1 Herzlich willkommen! Dozent: Dipl.-Ing. Jürgen Wemheuer Teil 6: Zusammenfassung und Beispiele Mail: wemheuer@ewla.de Online: http://cpp.ewla.de/ Zusammenfassung (1) 2 1. Programm in
MehrGenerative Programmierung
Generative Programmierung Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken 2005-01-12 Grundidee: Parametrisierung Die Abstraktion ist ein Grundprinzip der Softwaretechnik.
MehrEinführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
MehrPolymorphie. Überladen. Definition Methodennamen überladen Konstruktoren überladen Operatoren überladen Beispiele. Dr.
Polymorphie Überladen Definition Methodennamen überladen Konstruktoren überladen Operatoren überladen Beispiele Dr. Beatrice Amrhein Definition 2 Definition: Überladen (von Namen) Überladen bedeutet, dass
MehrC++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14
C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung
MehrShort Introduction to C# C# (C SHARP) Microsofts Antwort auf Java
Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Standardisierung durch die ECMA und ISO Short Introduction to C# C# (C
MehrGrundlagen von C# - 1
Grundlagen von C# - 1 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Über diesen Kurs 2. Benötigte Software 3. Exkurs: Architektur von.net und C# 4. Erstes Programm: Hello World Grundlegende Eigenschaften
Mehr