Пусть все ваши функции реализуют шаблон команды .
Ваш список становится
std::list<Command>
Когда вы перебираете список, вы вызываете Execute () метод каждого элемента списка.
Например, скажем, у вас есть простой командный интерфейс с именем Commander:
class Commander
{
public:
virtual ~Commander;
virtual void Execute();//= 0;
};
И у вас есть три объекта, которые вы хотите поместить в свой список: AБорзая, Gyrefalcon и Подруга.Оберните каждый в объект Commander, который вызывает интересующую функцию объекта.Борзая бежит:
class RunGreyhound: public Commander
{
public:
void Execute()
{
mGreyhound->Run();
}
private:
Greyhound* mGreyhound;
};
Жирный сокол летит:
class RunGyrefalcon: public Commander
{
public:
void Execute()
{
mGyrefalcon->Fly( mGyrefalcon->Prey() );
}
private:
Gyrefalcon* mGyrefalcon;
};
И Подруга кричит:
class RunGirlfriend: public Commander
{
public:
void Execute()
{
mGirlfriend->Squawk( mGirlfriend->MyJunk(), mGirlfriend->Mytrun() );
}
private:
Girlfriend* mGirlfriend;
};
Заполните объекты Командующего в вашем списке.Теперь вы можете перебирать их и вызывать метод Execute () каждого элемента:
std::list<Commander> cmdlist;
RunGreyhound dog;
cmdlist.push_back( dog );
RunGyrefalcon bird;
cmdlist.push_back( bird );
RunGirlfriend gurl;
cmdlist.push_back( gurl );
for ( std::list<Commander>::iterator rit = cmdlist.begin(); rit != cmdlist.end(); ++rit )
{
rit->Execute();
}