我有一个实现相同接口的任务向量。我有一个可以有多个任务的状态机对象,我有一大堆事件。如果调用了特定事件,我希望该事件调用“ProcessTasks”的函数,其中 ProcessTasks 采用需要调用的特定接口函数,并为每个任务调用该函数。我想避免在每个事件函数中使用巨大的 case 语句或重复 for 循环迭代,但我不知道该怎么做。是否有允许我这样做的构造/方法,或者 case 语句方法是最好的方法,还是最好在每个函数中折腾循环?
谢谢 : )
示例示例(我的状态模式 sm 中的单个状态类):
State_e StateIdle::EVENT_REQUEST_STOP_()
{
ProcessTasks( HandleStopFn );
return STATE_STOPPED;
}
// -- more events
/* desired solution allows me to have to implement
the loop only once, but be able to call any of
the functions in the interface, for any number of events */
for( vector<TaskPtr>::iterator it = m_tasks.begin(); it != m_tasks.end(); ++it )
{
it->HandlerFunction()
}
//TaskPtr 是 boost auto ptr 并实现了这个缩短的接口
class Task
{
void HandleActiveFn() = 0;
void HandleStopFn() = 0;
};