C ++ State Machin设计:单身还是不单身

时间:2017-04-18 22:14:19

标签: c++ reference singleton smart-pointers state-machine

是的,我知道,单身人士模式的问题已经多次讨论过了。我的略有不同,请阅读。

我正在研究状态机。任何实体都可以持有处理相关实体状态的状态机:

template <class T>
class State {
    // Default interface for a state
}

class Entity;
class SomeState : public State<Entity> {
    // Some implementation dedicated to Entity's type.
    // Presumably a Singleton but maybe I'm wrong
}

template <class T>
class StateMachine {
public:
    StateMachine(T& entity, SOME_TYPE initial_state);
private:
    T& m_entity;
}

class Entity {
public:
    // An entity that holds a state machine
    Entity(): m_stateMachine(*this, SOME_WAY_TO_GET_"SOME_TYPE") {}
private:
    // Its state machine
    StateMachine<Entity> m_stateMachine;
}

所以我的问题是: 什么类型应该是“SOME_TYPE”?

  • 我希望能够将SOME_TYPE存储在容器中(因此无法进行简单的引用);也许是reference_wrapper?对于我来说,reference或reference_wrapper似乎是最好的解决方案,因为状态机需要有一个状态(如果是指针则不能为null)。
  • 同样适用于smart_pointers:我尝试没有成功,因为SomeState的构造函数应该使用std :: make_shared公开(也许我应该创建它而不使用std :: make_shared?)
  • 我不想使用原始指针(我的代码中不需要任何“新”)
  • 我希望我的StateMachine设计能够与很多实体快速运行,并且很多StateMachine +状态对象不应该保持任何状态:这就是为什么我真的不想实例化每个实体的状态和改为使用单身,但也许我错了?
  • 因为它是一台状态机(所以我不知道我在哪个状态)我不能使用静态方法代替和对象(单例或不单元)。

那么,任何想法?我该如何设计呢?

0 个答案:

没有答案