同じインターフェイスを実装するタスクのベクトルがあります。複数のタスクを持つことができるステート マシン オブジェクトがあり、たくさんのイベントがあります。特定のイベントが呼び出された場合、ProcessTasks が呼び出される必要がある特定のインターフェイス関数を取得し、すべてのタスクに対してその関数を呼び出す「ProcessTasks」への関数を呼び出すイベントが必要です。すべてのイベント関数で巨大な case ステートメントを使用したり、for ループの反復を繰り返したりすることは避けたいのですが、その方法がわかりません。これを可能にする構成/アプローチはありますか、それともケースステートメントアプローチが最良の方法ですか、それとも各関数でループを投げるのが最善ですか?
ありがとう : )
サンプル例 (パターン化された 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 はブースト自動 ptr であり、この短縮されたインターフェースを実装します
class Task
{
void HandleActiveFn() = 0;
void HandleStopFn() = 0;
};