C++で擬似タスクは失敗かな〜
前回C++で擬似タスクシステムの雛型を設計してみましたが, もぅ,この段階でいろいろ問題点が浮上!!
class TaskXXX : public TaskBase
{
public :
//-------------------------------------------------------------------------
// コンストラクタ
// デフォルトの処理関数を設定しておく
//-------------------------------------------------------------------------
TaskXXX()
{
pFunc = TaskXXX::process1 ;
}
//-------------------------------------------------------------------------
// タスクの処理関数
// (メインルーチンから呼ばれる用)
//-------------------------------------------------------------------------
virtual void Process()
{
(this->*pFunc)();
}
private :
// 処理関数のポインタ
void (TaskXXX::*pFunc)() ;
//-------------------------------------------------------------------------
// 処理関数の変更
//-------------------------------------------------------------------------
void ChangeProcess( void (TaskXXX::*p)() )
{
pFunc = p ;
}
//-------------------------------------------------------------------------
// [ 実際の処理関数 ]
// ここは,させたい処理が増えるたび,状態が増えるたびに
// 関数を追加していく.
//-------------------------------------------------------------------------
void process1()
{
::printf("TaskBase::process1\n");
ChangeProcess( TaskXXX::process2 ); // 処理変更!
}
void process2()
{
::printf("TaskBase::process2\n");
ChangeProcess( TaskXXX::process3 );
}
void process3()
{
::printf("TaskBase::process3\n");
ChangeProcess( TaskXXX::process1 );
}
};
int main()
{
TaskXXX task ;
task.Process() ;
task.Process() ;
task.Process() ;
task.Process() ;
getchar();
return 0 ;
}
実行結果
TaskXXX::process1 TaskXXX::process2 TaskXXX::process3 TaskXXX::process1