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是指向内部链接对象的指针

  • 相关阅读:
    三级联动(在YII框架中)
    用composer安装Yii
    在apache中设置访问目录后进入的默认页面为index.php
    php mb_convert_encoding的使用
    采集数据和memchche的存储使用,分页展示
    php操作Memcache
    前端页面卡顿?或是DOM操作惹的祸,需优化代码
    windows mongodb 安装
    浅谈WebSocket
    使用Spring MVC HandlerExceptionResolver处理异常
  • 原文地址:https://www.cnblogs.com/xpylovely/p/12482571.html
Copyright © 2011-2022 走看看