View
27
Download
0
Category
Preview:
DESCRIPTION
C++ Templates. Templates Part of the ongoing development of the C++ language Integral part of the larger C++ Standard Library The Standard Template Library. C++ Templates. Based upon the notion of a type variable A variable that takes a type as its value T i, j, k; - PowerPoint PPT Presentation
Citation preview
Copyright, 2006 Oxford Consulting, Ltd - 1 - 29 March 2006
C++ Templates
Templates
Part of the ongoing development of the C++ language
Integral part of the larger C++ Standard Library
The Standard Template Library
Copyright, 2006 Oxford Consulting, Ltd - 2 - 29 March 2006
C++ Templates
Based upon the notion of a type variable
A variable that takes a type as its value
T i, j, k;Declares 3 variables
The type of the variables depends upon the value of T
If T is int variables are of type int float variables are of type float user-defined variables are of type user-defined
Copyright, 2006 Oxford Consulting, Ltd - 3 - 29 March 2006
C++ Templates
Kinds of Templates
FunctionPermit the development of generic algorithms
Class
Permit the development of generic objects
Copyright, 2006 Oxford Consulting, Ltd - 4 - 29 March 2006
C++ Templates
General Syntax
template < T0, T1… Tn> normal declaration or definition
template C++ keyword
Ti One or more formal parameters
A formal parameter
Must be written as: class Ti
Type parameter cannot have default value
Non-type parameter can have default values
Copyright, 2006 Oxford Consulting, Ltd - 5 - 29 March 2006
C++ Templates
General Syntax - Parameters
Type Parameters
Built-in - Non-type int char float*
User Defined
Functions
In older compilers function templates cannot use non-type parameters.
The function definition can.
Classes
The class template can use non-type parameters.
Copyright, 2006 Oxford Consulting, Ltd - 6 - 29 March 2006
C++ Templates
Function Templates
template <class T> T min (T var1, T var2);
The function min
Has two arguments: var1, var2 of type T
Returns a variable: of type T
template <class T> T min (T* ptVar1, T* ptVar2);
The function min
Has two arguments ptVar1, ptVar2 of type pointer to T
Returns a variable of type T
Copyright, 2006 Oxford Consulting, Ltd - 7 - 29 March 2006
C++ Templates
Function Templates
A templated function can be declared extern inline static
template <class T> inline T min (T var1, T var2);
Copyright, 2006 Oxford Consulting, Ltd - 8 - 29 March 2006
C++ Templates
Function Templates
Writing Function Templates
1. Write a specific version for each fixed type.
2. Compile and test each version.
3. Replace the fixed type with the type parameter.
4. Add the template header.
Copyright, 2006 Oxford Consulting, Ltd - 9 - 29 March 2006
C++ Templates
Function Templates
Template Instantiation
1. The formal parameters in the function signature are examined in turn. A return type cast does not matter.
template <class T> T f(T);
int b;
double aValue = (double) f(b);
T has the value int.
2. Each formal parameter involving a type parameter is matched with the corresponding argument in the function call. The match binds the type parameter.
Copyright, 2006 Oxford Consulting, Ltd - 10 - 29 March 2006
C++ Templates
Function Templates
Template Instantiation
3. All matches must be consistent. Only trivial promotions are
allowed.int& to const int&
4. Non-Type formal parameters must match without non-trivial conversion or promotion
Copyright, 2006 Oxford Consulting, Ltd - 11 - 29 March 2006
C++ Templates
Functions
Function Call Resolution1. Examine all non-template functions
if an exact matchcall that version
if multiple matchescompile error
2. Examine all template functionsif an exact match
instantiate then call that versionif multiple matches
compile error
3. Re-examine all non-template functions
Apply call resolution rules for overloaded functions
Copyright, 2006 Oxford Consulting, Ltd - 12 - 29 March 2006
C++ Templates
Class Templates
Particularly useful for making classes generic
Important application is container classes
Copyright, 2006 Oxford Consulting, Ltd - 13 - 29 March 2006
C++ Templates
Class Templates
Class Template Template header
Normal Class Definition
template < class T0, … class Tn, NT0, NT1...>
class ClassName
{
class body
}
Copyright, 2006 Oxford Consulting, Ltd - 14 - 29 March 2006
C++ Templates
Class Templates
Function Members Use the same template header as the class
Are instantiated when the compiler first sees a call to it
Syntax
template < class T0, … class Tn, NT0, NT1...>
returnType ClassName< class T0, … class Tn, NT0, NT1...>:: functionName (args)
{
function body
}
Copyright, 2006 Oxford Consulting, Ltd - 15 - 29 March 2006
C++ Templates
Class Templates
Static Members
A templated class can have static members
Each type has an associated set of static members
Declarations
static T my Function (args) { myFunction body}
static int myValue // must be defined outside of the class
Definitiontemplate <class T> int MyClass<T>::myValue = aValue;
Copyright, 2006 Oxford Consulting, Ltd - 16 - 29 March 2006
C++ Templates
Class TemplatesForward Declarations…..
template <class T> class MyClass // forward reference
….
….and Friends
template <class T> class MyClass
{
friend class YourClass<T>;
public:
……
}
Copyright, 2006 Oxford Consulting, Ltd - 17 - 29 March 2006
C++ Templates
Class Templates
Declaring an Instance
template <class T> class MyClass
{
public:
……
}
MyClass <char> myInstance;
Observe the use of <type> as part of the class name
Copyright, 2006 Oxford Consulting, Ltd - 18 - 29 March 2006
C++ Templates
Class Templates
Definition and Declaration If using header files, put the declaration and definition
both in the header file.
Templates as a type parameter The value of a type parameter can be a built-in or user
defined type.
The user defined type may be non-typed or typed.
Copyright, 2006 Oxford Consulting, Ltd - 19 - 29 March 2006
C++ Templates
Class Templates
Templates and Inheritance
Derivation works the same as with ordinary classes
One can create a new template object from an existing
template
Copyright, 2006 Oxford Consulting, Ltd - 20 - 29 March 2006
C++ Templates
Class Templates
Default Parameters Relatively new feature to templates A default value can be specified in a template definition Supported by most newer compilers.
Borland 5.0
Microsoft 4.0 and beyond
template <class T1, class T2 = int>
class MyClass
{ ….. }
Copyright, 2006 Oxford Consulting, Ltd - 21 - 29 March 2006
C++ Templates
Function and Class Templates
SpecializationMay need to a special version of a template to handle types not easily included in an existing template.
FunctionreturnType functionName (args) { function body }
Member FunctionclassName < specialized type> functionMember
(args)
{ function body }
Classclass className < specialized type> { class body };
Copyright, 2006 Oxford Consulting, Ltd - 22 - 29 March 2006
C++ Templates
Function and Class Templates
Explicit Instantiation
May wish to create a specific version of a
function or class
FunctionreturnType functionName (args);
Classclass className < explicit type>
Recommended