c++ template笔记(3)非类型模板参数nontype template parameters
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                c++ template笔记(3)非类型模板参数nontype template parameters
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                算是模板使用的一種技巧
 用模板當(dāng)數(shù)組元素參數(shù)維度?
 
 #include <stdexcept>template <typename T, int MAXSIZE>
class Stack {private:T elems[MAXSIZE];        // elementsint numElems;            // current number of elementspublic:Stack();                  // constructorvoid push(T const&);      // push elementvoid pop();               // pop elementT top() const;            // return top elementbool empty() const {      // return whether the stack is emptyreturn numElems == 0;}bool full() const {       // return whether the stack is fullreturn numElems == MAXSIZE;}
};// constructor
template <typename T, int MAXSIZE>
Stack<T,MAXSIZE>::Stack (): numElems(0)               // start with no elements
{// nothing else to do
}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;   // append element++numElems;               // increment number of elements
}template<typename T, int MAXSIZE>
void Stack<T,MAXSIZE>::pop ()
{if (numElems <= 0) {throw std::out_of_range("Stack<>::pop(): empty stack");}--numElems;               // decrement number of elements
}template <typename T, int MAXSIZE>
T Stack<T,MAXSIZE>::top () const
{if (numElems <= 0) {throw std::out_of_range("Stack<>::top(): empty stack");}return elems[numElems-1];  // return last element
} 使用時就可以根據(jù)需要指定最大的元素個數(shù),不用造成資源的浪費
#include <iostream> #include <string> #include <cstdlib> #include "stack4.hpp"int main() {try {Stack<int,20> int20Stack; // stack of up to 20 intsStack<int,40> int40Stack; // stack of up to 40 intsStack<std::string,40> stringStack; // stack of up to 40 strings// manipulate stack of up to 20 intsint20Stack.push(7);std::cout << int20Stack.top() << std::endl;int20Stack.pop();// manipulate stack of up to 40 stringsstringStack.push("hello");std::cout << stringStack.top() << std::endl; stringStack.pop();stringStack.pop();}catch (std::exception const& ex) {std::cerr << "Exception: " << ex.what() << std::endl;return EXIT_FAILURE; // exit program with ERROR status} }注意:被實例化出來的int20Stack和int40Stack不可以隱式轉(zhuǎn)換.
模板成員參數(shù)
template <typename T, int VAL> T addValue (T const& x) {return x + VAL; }特化的參數(shù),用于不在于類型,直接適用于函數(shù)中
注意點:浮點類型不可以作為nontype template parameters
以下定義是錯誤的
//error template <double T> double process(double v) {return v*T; } 超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的c++ template笔记(3)非类型模板参数nontype template parameters的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c++ template(4)基本技巧
- 下一篇: c++ template笔记(1)模板函
