>>880,881
キャストが要るようになったらプログラムが間違ってるのを疑えよ。
なんで仮想関数で得られる型安全を自ら壊すような「タスクシステム」に
こだわるんだ?そんなシステム要らない。

↓これでいいんじゃないの。

class State {
public:
 virtual void update() = 0;
};

class State1 : public State {
public:
 State1() : m_update_task(&State1::begin_task) {}
 void update() { (this->*m_update_task)(); }
private:
 void (State1::*m_update_task)();
 void begin_task() { m_update_task = &State1::task1; }
 void task1() {}
};