Mega Code Archive

 
Categories / C++ Tutorial / Template
 

Primary template to compute sqrt(N) via iteration and partial specialization to end the iteration

/* 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> // primary template to compute sqrt(N) via iteration template <int N, int I=1> class Sqrt {   public:     enum { result = (I*I<N) ? Sqrt<N,I+1>::result                             : I }; }; // partial specialization to end the iteration template<int N> class Sqrt<N,N> {   public:     enum { result = N }; }; int main() {     std::cout << "Sqrt<16>::result = " << Sqrt<16>::result << std::endl;     std::cout << "Sqrt<25>::result = " << Sqrt<25>::result << std::endl;     std::cout << "Sqrt<42>::result = " << Sqrt<42>::result << std::endl;     std::cout << "Sqrt<1>::result =  " << Sqrt<1>::result << std::endl; } Sqrt::result = 4 Sqrt::result = 5 Sqrt::result = 7 Sqrt::result = 1