#ifndef S_FSTATE_VIRTUAL_ID_H #define S_FSTATE_VIRTUAL_ID_H #include "s/s_FStateID.hpp" #include "s/s_StateID.hpp" template class sFStateVirtualID_c : public sFStateID_c { public: typedef void (T::*stateFunc)(); sFStateVirtualID_c( const sStateIDIf_c *superState, const char *name, stateFunc initialize, stateFunc execute, stateFunc finalize ) : sFStateID_c(name, initialize, execute, finalize), mpSuperState(superState) {} virtual unsigned int number() const { return superID()->numberBase(); } const sFStateVirtualID_c *superID() const { if (!mpSuperState->isNull()) { return static_cast *>(mpSuperState)->superID(); } return this; } unsigned int numberBase() const { return sStateID_c::number(); } private: const sStateIDIf_c *mpSuperState; }; #endif