Lecture 5 - Page 3 : 39
Notes about C++
Templates and The Standard Library
* Templates
Templates
Templates versus generics in Java, C# and C++
Example - Point<C>
Class templates in C++
Example - Point<C,dim,default_value>
Function templates
Policies with Templates
Example of Policies with Templates
Template Specialization
Example - Specialization of Point<C> to Point<char>
Specialization of class templates - complete and partial
Compile time computations with template specialization
* Vector Basics
Vectors - basic use
* Iterators
Iterators seen as generalized pointers
Example uses of iterators - basis stuff
Different classifications of iterators
Categories of iterators
Insert iterators
* Standard Containers
Documentation of the container library
Overview of containers
A priority queue example
A map example
Common properties of containers
Container member types
A vector specialization: vector<bool>
* Algorithms
Documentation of the algorithms library
Overview of Algorithms
Principles used for algorithms
The for-each algorithm
Function objects
Using the sort algorithm
An example of for-each and function objects
Use of function objects in STL
Adapter examples
Templates versus generics in Java, C# and C++
Templates in C++ can be compared with generics in Java and C#
Java
Type erasure: type parameters are compiled away.
Problems with reflection - cannot reestablish actual type parameters
Wild cards - an actual type parameter mechanism
Alleviates the covariance and contra variance problems with generic instance
C#
Reflection with generic types is possible
Support of constraints on formal parameter types:
where clauses
where class
;
where struct
;
where new()
;
where C
;
where C, I
When value types are used as actual type parameters
Separate instantiations are generated
C#4.0: Interfaces can be defined as covariant (
out
) or contravariant (
in
)
C++
Template specialization, and partial specialization
Allow alternative implementation for certain template parameters
To avoid
code bloat
in some situations
Containers of pointers share their implementation (§13.5)
Powerful compile time calcuations - Turing complete
Templates cannot be compiled as such (§13.2.5)
The instantiations are compiled
Only relatively superficial compiler check of the template - before any instantiation
Relies on
compile-time duck typing