顺手翻了下3d游戏引擎设计实时计算机图形学的应用方法这本书(英文本第二版)
在其800page.18.4章的
template<class T>
class Stack中这儿有一个小错误
就是
在函数
bool Push..
中间 其判断条件是错误的
对于这个类模板
我把它成了了盖莫引擎死板的风格
如下:
///////////////////////////////////////////////////////////
/// 定义引擎栈模板类
///////////////////////////////////////////////////////////
template<class T>
class Stack : NonCopyable
{
public:
    ///////////////////////////////////////////////////////
    /// 构造,析构栈模板
    ///////////////////////////////////////////////////////
    Stack(int maxsize);
    ~Stack();
public:     
    ///////////////////////////////////////////////////////
    /// 数据入栈
    ///////////////////////////////////////////////////////
    bool Push(const T& element);
    
    ///////////////////////////////////////////////////////
    /// 数据出栈
    ///////////////////////////////////////////////////////    
    bool Pop(T& element);
    
    //////////////////////////////////////////////////////////
    /// 获取栈顶元素
    //////////////////////////////////////////////////////////     
    bool GetTop(T& element)const;
                
    ///////////////////////////////////////////////////////
    /// 检查栈是否为空栈,满栈
    ///////////////////////////////////////////////////////    
    bool IsEmpty()const;
    bool IsFull()const;
private:
    int  maxsize;
    int  top;
    T*   data;    
};
#include <GEngine/Template/Stack.inl>
in stack.inl
///////////////////////////////////////////////////////
/// 构造,析构栈模板
///////////////////////////////////////////////////////
template<class T>
Stack<T>::Stack(int maxsize):
top(-1)
{
    ASSERT(maxsize > 0);
    this->maxsize = maxsize;
    data = new T[this->maxsize];    
}
template<class T>
Stack<T>::~Stack()
{
    CHECK_PTR_ARRAY_AND_DELETE(data);
}
     
///////////////////////////////////////////////////////
/// 数据入栈
///////////////////////////////////////////////////////
template<class T>
inline bool Stack<T>::Push(const T& element)
{
    if(top < maxsize-1)
    {
        data[++top] = element;
        return true; 
    }
    return false;
}
    
///////////////////////////////////////////////////////
/// 数据出栈
///////////////////////////////////////////////////////    
template<class T>
inline bool Stack<T>::Pop(T& element)
{
    if(top >=0)
    {
        element = data[top--];
        return true;
    }
    return false;
}
    
//////////////////////////////////////////////////////////
/// 获取栈顶元素
//////////////////////////////////////////////////////////     
template<class T>
inline bool Stack<T>::GetTop(T& element)const
{
    if(top >= 0)
    {
        element = data[top];
        return true; 
    }
    return false;
}
                
///////////////////////////////////////////////////////
/// 检查栈是否为空栈,满栈
///////////////////////////////////////////////////////    
template<class T>
inline bool Stack<T>::IsEmpty()const
{
    return top == -1;
}
template<class T>
inline bool Stack<T>::IsFull()const
{
    return top == maxsize-1;
}