なんかここまで来ると、クラスの必要ないじゃないか
って感じもするな…。

#include <iostream>

class Task;
class TaskManager;

typedef void(Task::*TaskFunc)();

class Task {
 friend class TaskManager;
public:
 void SetFunc(TaskFunc updateFunc) { m_updateFunc = updateFunc; }
 // void Update() { (this->*m_updateFunc)(); }
private:
 TaskFunc m_updateFunc;
};

class HogeTask : public Task {
public:
 HogeTask() {
  SetFunc(static_cast <TaskFunc> (&HogeTask::Func1));
 }
 void Func1() {
  cout << "Func 1\n";
  SetFunc(static_cast <TaskFunc> (&HogeTask::Func2));
 }
 void Func2() { cout << "Func 2\n"; }
 void Func3() { cout << "Func 3\n"; }
};

class TaskManager {
 Task *taskArray[100];
 int iPoint;
public:
 TaskManager() { iPoint = 0; }
 ~TaskManager() {}
 void setTask(Task* task) { taskArray[iPoint++] = task; }
 void execute(void) {
  {for(int i = 0; i < iPoint; i++) {
   (taskArray[i]->*(taskArray[i]->m_updateFunc))();
  }}
 }
};