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;
|
posted on 2007-07-21 16:52 cloudseawang 阅读(207) 评论(0) 编辑 收藏 举报