Non-type parameters for templates

Besides the template arguments that are preceded by the class or typename keywords , which represent types, templates can also have regular typed parameters, similar to those found in functions. As an example, have a look at this class template that is used to contain sequences of elements

// sequence template

#include <iostream>

using namespace std;

template <class T, int N>

class mysequence {

T memblock [N];

public:

void setmember (int x, T value);

T getmember (int x);

};

template <class T, int N>

void mysequence<T,N>::setmember (int x, T value) {

memblock[x]=value;

}

template <class T, int N>

T mysequence<T,N>::getmember (int x) {

return memblock[x];

}

int main () {

mysequence <int,5> myints;

mysequence <double,5> myfloats;

myints.setmember (0,100);

myfloats.setmember (3,3.1416);

cout << myints.getmember(0) << '\n';

cout << myfloats.getmember(3) << '\n';

return 0;

}


It is also possible to set default values or types for class template parameters. For example, if the previous class template definition had been:

template <class T=char, int N=10> class mysequence {..};

            

We could create objects using the default template parameters by declaring:

mysequence<> myseq;

            

Which would be equivalent to:

mysequence<char,10> myseq;

            
 

 

你可能感兴趣的:(parameter)