Default template arguments : template parameter « template « C++ Tutorial






#include <iostream>
#include <cstdlib>
using namespace std;

// T defaults to int and size defaults to 10
template <class T=int, int size=10> class MyType {
  T a[size];
public:
  MyType() {
    for(int i=0; i<size; i++)
       a[i] = i;
  }
  T &operator[](int i){
      if(i<0 || i> size-1) {
        cout << "\nIndex value of ";
        cout << i << " is out-of-bounds.\n";
        exit(1);
      }
      return a[i];
  }
};


int main()
{
  MyType<int, 100> intarray;
  MyType<double> doublearray;
  MyType<> defarray;

  cout << "int array: ";
  for(int i=0; i<100; i++)
     intarray[i] = i;
  for(int i=0; i<100; i++)
     cout << intarray[i] << "  ";
  cout << '\n';

  cout << "double array: ";
  for(int i=0; i<10; i++)
     doublearray[i] = (double) i/3;
  for(int i=0; i<10; i++)
     cout << doublearray[i] << "  ";
  cout << '\n';

  cout << "defarray array: ";
  for(int i=0; i<10; i++)
     defarray[i] = i;
  for(int i=0; i<10; i++)
     cout << defarray[i] << "  ";
  cout << '\n';

  return 0;
}
int array: 0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34
 35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69
 70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99
double array: 0  0.333333  0.666667  1  1.33333  1.66667  2  2.33333  2.66667  3
defarray array: 0  1  2  3  4  5  6  7  8  9








13.4.template parameter
13.4.1.Demonstrate non-type template arguments
13.4.2.Default template arguments
13.4.3.primary template: yield second or third argument depending on first argument
13.4.4.primary template to compute sqrt(N) via iteration and partial specialization to end the iteration
13.4.5.Sqrt: primary template: yield second or third argument depending on first argument
13.4.6.Loop with generic parameter
13.4.7.Define implicit_cast
13.4.8.template function for generic parameter and pointer to generic parameter
13.4.9.Nested template type
13.4.10.Use template parameter as constructor parameter