现在的位置: 首页 > 综合 > 正文

模板类的使用

2014年02月25日 ⁄ 综合 ⁄ 共 1107字 ⁄ 字号 评论关闭

main.h

template <class T>
class actioncontainer
{
public:
	//构造函数
	actioncontainer()
	{
		m_nRedoPos = 0;
		m_nUndoPos = 0;
	}
	//容器的接口函数
	void add(T value);
	T redo();
	T undo();
	//容器的属性
private:
	int m_nRedoPos;
	int m_nUndoPos;
	const static int ACTION_SIZE=5;

	T m_RedoAction[ACTION_SIZE];
	T m_UndoAction[ACTION_SIZE];
};

template<class T>
void actioncontainer<T>::add(T value)
{
	if (m_nUndoPos >= ACTION_SIZE)
	{
		//如果容器已潢,刚调整添加位置
		m_nUndoPos = ACTION_SIZE - 1;
		for(int i = 0; i < ACTION_SIZE; i++)
		{
			m_UndoAction[i] = m_UndoAction[i+1];
		}
	}
	m_UndoAction[m_nUndoPos++] = value;
}

template<class T>
T actioncontainer<T>::redo()
{
	//将恢复动作复制到撤销数组中
	m_UndoAction[m_nUndoPos++] = m_RedoAction[--m_nRedoPos];

	//返回恢复的动作
	return m_RedoAction[m_nRedoPos];
}

template<class T>
T actioncontainer<T>::undo()
{
	m_RedoAction[m_nRedoPos++] = m_UndoAction[--m_nUndoPos];

	return m_UndoAction[m_nUndoPos];
}

main.cpp

// test_iostream.cpp : 定义控制台应用程序的入口点。
//
#include "StdAfx.h"
#include "main.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	actioncontainer<int> intaction;

	//向容器中加动作
	intaction.add(1);
	intaction.add(2);
	intaction.add(3);
	intaction.add(4);

	//撤销上一步动作
	int nUndo = intaction.undo();
	nUndo = intaction.undo();

	//恢复
	int nRedo = intaction.redo();
	return 0;
}

抱歉!评论已关闭.