31 lines
832 B
C++
31 lines
832 B
C++
#pragma once
|
|
#include "IState.h"
|
|
#include <map>
|
|
#include <memory>
|
|
|
|
class StatePreManager
|
|
{
|
|
protected:
|
|
static std::map<std::string,std::shared_ptr<IState>> motorState;
|
|
};
|
|
|
|
|
|
template<typename T>
|
|
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<std::string, std::shared_ptr<IState>>::iterator iter = motorState.find(type_name);
|
|
if (iter == motorState.end()) {
|
|
motorState.insert(std::pair<std::string, std::shared_ptr<IState>>(type_name, std::shared_ptr<IState>(new T)));
|
|
}
|
|
motorState[type_name]->InitState(state);
|
|
return motorState[type_name].get();
|
|
}
|
|
};
|