首页 > 其他 > 详细

非类型模板参数

时间:2020-05-27 13:56:05      阅读:50      评论:0      收藏:0      [点我收藏+]

第四章:

一、非类型的类模板参数

#pragma once
#include <stdexcept>


template<typename T, int MAXSIZE>
class Stack
{
private:
    T elems[MAXSIZE];
    int numElems;
public:
    Stack();
    void push(T const &elem);
    void pop();
    T top() const;
    bool empty() const {
        return numElems == 0;
    }
    bool full() const {
        return numElems == MAXSIZE;
    }
};

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

template<typename T, int MAXSIZE>
inline 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>
inline void Stack<T, MAXSIZE>::pop()
{
    if (numElems <= 0) {
        throw std::out_of_range("Stack<>::pop() empty stack");
    }
    --numElems;
}

template<typename T, int MAXSIZE>
inline T Stack<T, MAXSIZE>::top() const
{
    if (numElems < 0) {
        throw std::out_of_range("Stack<>::top() stack is empty");
    }
    return elems[numElems - 1];
}

测试函数:

#include <iostream>
#include <string>
#include <cstdlib>
#include "stack4.hpp"

int main()
{
    std::cout << "Hello World!\n";
    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;
    }
}

 

非类型模板参数

原文:https://www.cnblogs.com/ch122633/p/12972419.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!