Mega Code Archive

 
Categories / C++ Tutorial / Template
 

Partial specialization as end criteria

/* 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 template <int DIM, typename T> class DotProduct {   public:     static T result (T* a, T* b) {         return *a * *b  +  DotProduct<DIM-1,T>::result(a+1,b+1);     } }; // partial specialization as end criteria template <typename T> class DotProduct<1,T> {   public:     static T result (T* a, T* b) {         return *a * *b;     } }; // convenience function template <int DIM, typename T> inline T dot_product (T* a, T* b) {     return DotProduct<DIM,T>::result(a,b); } int main() {     int a[3] = { 1, 2, 3};     int b[3] = { 5, 6, 7};               << '\n'; } dot_product(a,b) = 38 dot_product(a,a) = 14