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:
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 |
// 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;
}
|
100
3.1416
|
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;
|
0 komentar:
Post a Comment