Presentation is loading. Please wait.

Presentation is loading. Please wait.

Parasol Lab, Texas A&M University

Similar presentations


Presentation on theme: "Parasol Lab, Texas A&M University"— Presentation transcript:

1 Parasol Lab, Texas A&M University
C++ Review Templates Parasol Lab, Texas A&M University 1 1

2 Outline Generic Programming C++ Templates Function Templates
Class Templates Typedef Summary 2 2

3 Generic Programming Programming/developing algorithms with the abstraction of types Algorithms/data is expressed “without type” The uses of the abstract type define the necessary operations needed when instantiation of the algorithm/data occurs template<typename T> T Add(const T& t1, const T& t2){ return t1+t2; }

4 C++ Templates Templates are not types, but rather they are a placeholder for a type At compile time, the compiler automatically “replaces” the placeholders with the concrete type Closer to reality – the compiler makes a copy of the template, fills in the placeholders, and compiles the code C++ templates come in two flavors: Functions templates Class templates Similar to Java Generics Next few slides are just a refresher for C++ templates: Templates are not types, but rather they are a placeholder for a type C++ templates come in two flavors: Functions templates Class templates

5 Function Templates used to define generic algorithms
While this is useful, it only works for integers. A better solution is to define a function template for max int max(int x, int y){ return x < y ? y : x; } Template functions have the following form: template < template-argument-list > function-definition The template-argument-list is one or more type-names within the scope of the template definition. In template functions the first argument is always a type. template<class T> T max(T x, T y){ return x < y ? y : x; }

6 Function Templates Nothing special has to be done to use a function template Note: all that is required of the type passed to max is the comparison operator, operator<. int main(int argc, char* argv[]) { int a = 3, b = 7; double x = 3.14, y = 2.71; cout << max(a, b) << endl; // Instantiated with type int cout << max(x, y) << endl; // Instantiated with type double cout << max(a, x) << endl; // ERROR: types do not match } SHOW PREVIOUS PAGE AS FOIL Nothing special has to be done to use a function template No special libraries or header files required. The compiler examines the types of the arguments and instantiates the appropriate function for you. For this example, we are only using the built-in types (e.g. int and double), so the C++ language defines the ‘less-than’ operator. SHOW EXAMPLE ( func_template1 )

7 Class Templates Class Templates
May contain data member objects of any type. template <class T> class myarray { public: T* v; int sz; myarray(int s) { v = new T [sz = s]; } // Constructor ~myarray() { delete[] v; } // Destructor T& operator[] (int i) { return v[i]; } void set(int i, T val) { v[i] = val; } int size() { return sz; } }; Class Templates Just as a function template is able to take argument of any type, a class template may contain (as its data members) objects of any type.  class myarray You can instantiate different widget-containers which store objects of different types: myarray<int> iwidget(10); myarray<char> cwidget(10); myarray<shape> swidget(10); Take a look at the notation, the type-name is myarray<specific_type>. Then instantiate the same container with objects of different types: myarray<int> iarr(10); myarray<shape> sarr(10);

8 Typedef “alias” of types into a short hand
Very common when using templates as syntax can be verbose Ex. typedef vector<int> VecInt; typedef map<string, tuple<double, int, float, MyClass> > MyTuple; Sometimes you need to use typename before the type Typedef in a templated function for type located within a templated class typedef typename vector<T>::iterator IT;

9 The skies are the limit! Templates have an extreme amount of uses
Can have templated classes and functions with many template parameters Specialized templates for specific types Etc, etc, etc. template<typename T1, typename T2> void myFunc(T1& t1, T2& t2); template<class T> void myFunc(T& t); template<> void myFunc<string>(string& t); //specialization for strings

10 Summary Generic programming allows for the abstraction of types
C++ templates are an instantiation of generic programming C++ has function templates and class templates Templates have many uses and allow for very interesting code design

11 Exercise Create a class Point which has a template parameter of the type of internal data, T. Store an internal array of type T which should have a fixed dimension (2, 3, or n – maybe passed in the constructor). Create a template function to compute the minimum of an array. Recommendation: template the function on a generic array type Instantiate a Point<double> and a Point<int> and print their values. Create an array of 10 random integers and an array of 10 random doubles. Use your minimum function to print the minimum of the arrays.


Download ppt "Parasol Lab, Texas A&M University"

Similar presentations


Ads by Google