zoukankan      html  css  js  c++  java
  • 模板笔记4 非类型模板参数

    #include <string>
    #include <iostream>
    #include <stdexcept>

    template<typename T, int MAXSIZE>
    //template<typename T = int, int MAXSIZE = 100>//可以指定默认值!!!
    class Stack{
    private:
    T elems[MAXSIZE];
    int numElems;
    public:
    Stack();
    void push(T const&);
    void pop();
    T top() const;
    bool empty() const{
    return numElems == 0;
    }
    bool full() const {
    return numElems == MAXSIZE;
    }
    };

    template<typename T, int MAXSIZE>
    Stack<T, MAXSIZE>::Stack(): numElems(0){}

    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 ()
    {
    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 <= 0)
    {
    throw std::out_of_range("Stack<>::top(): empty stack");
    }
    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() << std::endl;
    int20Stack.pop();
    stringStack.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;
    }
    }

    非类型模板参数的限制:可以时常整数(包括枚举值)和指向外部链接对象的指针。

    不允许是浮点数,类对象和内部链接对象。

    错误举例:

    template<char const *name>

    class Myclass{

      ...;

    };

    char const* s = 'hello";//错误不能使用全局指针作为模板参数

    Myclass<s>  x;//错误,s是指向内部链接对象的指针

  • 相关阅读:
    Python股票分析系列——系列介绍和获取股票数据.p1
    快速相关
    特别长序列的快速卷积
    长序列的快速卷积
    快速卷积
    素因子快速傅里叶变换
    用一个N点复序列的FFT同时计算两个N点实序列离散傅里叶变换
    实序列快速傅里叶变换(二)
    实序列快速傅里叶变换(一)
    java 对于手机号码、邮箱、银行卡号脱敏一条龙服务
  • 原文地址:https://www.cnblogs.com/xpylovely/p/12482571.html
Copyright © 2011-2022 走看看