C++非類型類模板參數(shù)基本概念正確理解
C++編程語言已經(jīng)出現(xiàn)就立即引起了開發(fā)人員的注意,它具有C語言的所用功能,并能支持許多程序設(shè)計(jì)風(fēng)格。我們今天要為大家介紹的則是C++非類型類模板參數(shù)的一些基本概念,讓大家對這方面的內(nèi)容有一個(gè)更加深入的了解。
我認(rèn)為C++非類型類模板參數(shù)相當(dāng)于一個(gè)全局常量的角色。書中舉了下面的例子來說明非類型的類模板。這一章通過重新定義一個(gè)Stack模板,要求使用一個(gè)固定大小的數(shù)組作為元素的容器,并且數(shù)組的大小可以由模板的使用者自己定義。那么,對于模板的設(shè)計(jì)者,就應(yīng)該提供一個(gè)接口使得使用者可以定義數(shù)組的大小。這就需要用到非類型的類模板參數(shù)。下面的代碼能很好的解釋這個(gè)問題:
- #include < iostream>
- #include < string>
- #include < cstdlib>
- #include < stdexcept>
- template< typename T, int MAXSIZE>
- class Stack{
- private:
- T elems[MAXSIZE];
- int numElems;
- public:
- Stack();
- void push(T const&);
- void pop();
- T top() const;
- bool isEmpty() const{
- return numElems == 0;
- }
- bool isFull() const{
- return numElems == MAXSIZE;
- }
- };
- template< typename T, int MAXSIZE>
- Stack< T, MAXSIZE>::Stack():numElems(0)
- {
- // 不作任何事,僅為了初始化numElems。
- }
- template< typename T, int MAXSIZE>
- void Stack< T, MAXSIZE>::push(T const& elem)
- {
- if(numElems == MAXSIZE)
- {
- throw std::out_of_range("Stack< >::push()==>stack is full.");
- }
- elems[numElems] = elem;
- ++numElems;
- }
- template< typename T, int MAXSIZE>
- void Stack< T, MAXSIZE>::pop()
- {
- 47 if(numElems < = 0)
- {
- throw std::out_of_range("Stack< >::pop: empty stack");
- }
- --numElems;
- }
- template< typename T, int MAXSIZE>
- T Stack< T, MAXSIZE>::top()const
- {
- if(numElems)
- {
- throw std::out_of_range("Stack< >::pop: empty stack");
- }
- // 返回***一個(gè)元素。
- return elems[numElems - 1];
- }
- int main()
- {
- try
- {
- Stack< int, 20> int20Stack;
- Stack< int, 40> int40Stack;
- Stack< std::string, 40> stringStack;
- int20Stack.push(7);
- std::cout< < "int20Stack.top() : "< < int20Stack.top()< < std::endl;
- int20Stack.pop();
- stringStack.push("HelloWorld!");
- std::cout< < "stringStack.top() : "< < stringStack.top()< < std::endl;
- stringStack.pop();
- stringStack.pop();
- }
- catch(std::exception const& ex)
- {
- std::cerr< < "Exception: "< < ex.what()< < std::endl;
- return EXIT_FAILURE;
- }
- return 0;
- }
上面的代碼揭示了C++非類型類模板參數(shù)的定義和使用方法。
【編輯推薦】