让你的所有函数都实现Command Pattern.
你的列表变成了一个
std::list<Command>
当您遍历列表时,您会调用每个列表项的 Execute() 方法。
例如,假设您有一个名为 Commander 的简单 Command 接口:
class Commander
{
public:
virtual ~Commander;
virtual void Execute();//= 0;
};
你想把三个对象放在你的列表中:一只灰狗、一只 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();
}