Mega Code Archive

 
Categories / C++ Tutorial / Template
 

Template function to get the maximum of three values of any type (call-by-reference)

/* 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.  */ #include <iostream> #include <cstring> #include <string> // maximum of two values of any type (call-by-reference) template <typename T> inline T const& max (T const& a, T const& b) {     return  a < b  ?  b : a; } // maximum of two C-strings (call-by-value) inline char const* max (char const* a, char const* b) {     return  std::strcmp(a,b) < 0  ?  b : a; } // maximum of three values of any type (call-by-reference) template <typename T> inline T const& max (T const& a, T const& b, T const& c) {     return max (max(a,b), c);  // error, if max(a,b) uses call-by-value } int main () {     std::cout << ::max(7, 42, 68);     // OK     const char* s1 = "frederic";     const char* s2 = "anica";     const char* s3 = "lucas";     //::max(s1, s2, s3);    // ERROR } 68"