1 / 22

C++ Templates

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;

Download Presentation

C++ Templates

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Templates • Templates • Part of the ongoing development of the C++ language • Integral part of the larger C++ Standard Library • The Standard Template Library

  2. 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

  3. C++ Templates • Kinds of Templates • Function • Permit the development of generic algorithms • Class • Permit the development of generic objects

  4. 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

  5. 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.

  6. 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

  7. C++ Templates • Function Templates • A templated function can be declared • extern • inline • static • template <class T> inline T min (T var1, T var2);

  8. 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.

  9. 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.

  10. 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

  11. C++ Templates • Functions • Function Call Resolution • 1. Examine all non-template functions • if an exact match • call that version • if multiple matches • compile error • 2. Examine all template functions • if an exact match • instantiate then call that version • if multiple matches • compile error • 3. Re-examine all non-template functions • Apply call resolution rules for overloaded functions

  12. C++ Templates • Class Templates • Particularly useful for making classes generic • Important application is container classes

  13. C++ Templates • Class Templates • Class Template • Template header • Normal Class Definition • template < class T0, … class Tn, NT0, NT1...> • class ClassName • { • class body • }

  14. 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 • }

  15. 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 • Definition • template <class T> int MyClass<T>::myValue = aValue;

  16. C++ Templates • Class Templates Forward Declarations….. • template <class T> class MyClass // forward reference • …. • ….and Friends • template <class T> class MyClass • { • friend class YourClass<T>; • public: • …… • }

  17. 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

  18. 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.

  19. 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

  20. 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 • { ….. }

  21. C++ Templates • Function and Class Templates • Specialization • May need to a special version of a template to handle types not easily included in an existing template. • Function • returnType functionName (args) { function body } • Member Function • className < specialized type> functionMember (args) • { function body } • Class • class className < specialized type> { class body };

  22. C++ Templates • Function and Class Templates • Explicit Instantiation • May wish to create a specific version of a function or class • Function • returnType functionName (args); • Class • class className < explicit type>

More Related