rk3399_arm_lvds/motorcontroller/StateManager.h

31 lines
832 B
C
Raw Permalink Normal View History

2024-03-05 03:46:18 +00:00
#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();
}
};