Command.hpp:
#ifndef _COMMAND_HPP
#define _COMMAND_HPP
#include <iostream>
#include <stack>
#include <string>
class Command
{
public:
Command(){}
virtual ~Command(){}
virtual void Execute() = 0;
};
class InputCommand : public Command
{
public:
InputCommand( const std::string &input )
{
mInput = input;
}
~InputCommand()
{}
void Execute()
{
printf( "current string: %s\n", mInput.c_str() );
}
private:
std::string mInput;
};
class Commander
{
public:
Commander( Command *pCmd )
{
//最初的命令数据
mUndo.push( pCmd );
}
~Commander()
{
while( false == mUndo.empty() )
{
delete mUndo.top();
mUndo.pop();
}
while( false == mRedo.empty() )
{
delete mRedo.top();
mRedo.pop();
}
}
void ExecuteCommand( Command *pCmd )
{
pCmd->Execute();
mUndo.push( pCmd );
}
void Undo()
{
if( mUndo.size() < 2