顺手翻了下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;
}