码迷,mamicode.com
首页 > 其他好文 > 详细

类模板使用示例(五) 非类型类模板参数

时间:2015-04-22 01:49:33      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

Stack4.hpp的代码如下:

#ifndef STACK4_HPP
#define STACK4_HPP

#include <iostream>
#include <vector>
#include <stdexcept>

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

    bool full() const
    {
        return MAXSIZE == numElems;
    }
private:
    T elems[MAXSIZE];
    int numElems;
};

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 (full())
    {
        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 (empty())
    {
        throw std::out_of_range("Stack<>::pop(): empty stack");
    }

    --numElems;
}

template <typename T, int MAXSIZE>
T Stack<T, MAXSIZE>::top() const
{
    if (empty())
    {
        throw std::out_of_range("Stack<>::top(): empty stack");
    }

    return elems[numElems-1];
}

#endif // STACK4_HPP

 

测试代码main.cpp:

#include <iostream>
#include <string>
#include <deque>
#include <cstdlib>
#include <typeinfo>
#include "Stack4.hpp"

using namespace std;

int main()
{
   try
    {
        Stack<int, 20> int20Stack;
        int20Stack.push(7);
        cout << int20Stack.top() << endl;
        int20Stack.pop();

        Stack<int, 40> int40Stack;

        cout << "\nThe type of int20Stack: " << typeid(int20Stack).name() << endl
             << "The type of int40Stack: " << typeid(int40Stack).name() << endl;

        Stack<string, 40> string40Stack;
        string40Stack.push("Hello");
        cout << endl << string40Stack.top() <<endl;
        string40Stack.pop();
        string40Stack.pop();
    }
    catch (std::exception const& ex)
    {
        cerr << "Exception: " << ex.what() << endl;
        return EXIT_FAILURE;// n stdlib.h
    }

    return 0;
}

 

结果:

技术分享

类模板使用示例(五) 非类型类模板参数

标签:

原文地址:http://www.cnblogs.com/AmitX-moten/p/4446082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!