#pragma once #include "IState.h" #include #include class StatePreManager { protected: static std::map> motorState; }; template class StateManager:public StatePreManager { public: StateManager(/* args */) = delete; StateManager(const StateManager&) = delete; StateManager& operator=(const StateManager&) = delete; static IState* GetState(int state=0) { std::string type_name = typeid(T).name(); std::map>::iterator iter = motorState.find(type_name); if (iter == motorState.end()) { motorState.insert(std::pair>(type_name, std::shared_ptr(new T))); } motorState[type_name]->InitState(state); return motorState[type_name].get(); } };