template function to get the maximum of two values : template function « template « C++ Tutorial






/* The following code example is taken from the book
 * "C++ Templates - The Complete Guide"
 * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002
 *
 * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.
 * Permission to copy, use, modify, sell and distribute this software
 * is granted provided this copyright notice appears in all copies.
 * This software is provided "as is" without express or implied
 * warranty, and with no claim as to its suitability for any purpose.
 */
// maximum of two int values

#include <iostream>
using namespace std;

inline int const& max (int const& a, int const& b)
{
    return  a < b ? b : a;
}

// maximum of two values of any type
template <typename T>
inline T const& max (T const& a, T const& b)
{
    return  a < b ? b : a;
}

// maximum of three values of any type
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
    return ::max (::max(a,b), c);
}

int main()
{
    cout <<"\n\n" <<::max(7, 42, 68);     // calls the template for three arguments
    cout <<"\n\n" <<::max(7.0, 42.0);     // calls max<double> (by argument deduction)
    cout <<"\n\n" <<::max('a', 'b');      // calls max<char> (by argument deduction)
    cout <<"\n\n" <<::max(7, 42);         // calls the nontemplate for two ints
    cout <<"\n\n" <<::max<>(7, 42);       // calls max<int> (by argument deduction)
    cout <<"\n\n" <<::max<double>(7, 42); // calls max<double> (no argument deduction)
    cout <<"\n\n" <<::max('a', 42.7);     // calls the nontemplate for two ints
}
68

42

b

42

42

42

97"








13.2.template function
13.2.1.function template: GetMax
13.2.2.Function template: swapargs
13.2.3.template type
13.2.4.Using standard parameters in a template function
13.2.5.Overload a function template declaration
13.2.6.Function with generic parameters
13.2.7.template function to display the number limits
13.2.8.Overload template function
13.2.9.Specify template argument explicitly and implicitly
13.2.10.Namespace with template function
13.2.11.reference and non-reference template function
13.2.12.template function to print elements of an STL container
13.2.13.template function to get the maximum of three values of any type (call-by-reference)
13.2.14.template function to get the maximum of two values