在C ++中扩展枚举的模式

时间:2019-01-28 14:34:43

标签: c++ qt design-patterns

我有一个基类,它定义了所有子类共享的一些公共状态,并且子类可能能够添加更具体的状态。由于无法在C ++中扩展枚举,因此我有以下代码:

class AbstractMachine
{
public:
    enum State {
        AbstractMachineState1,
        AbstractMachineState2,
        AbstractMachineState3
    };
    virtual enum State state() const = 0;
    // ..
};

class Machine : public AbstractMachine
{
public:
    // more specific states related to Machine
    enum MachineState {
        MachineState1,
        MachineState2,
        MachineState3
    };
    virtual enum State state() const = 0;
    virtual enum MachineState machineState() const = 0;
    // ..
};

class SpecificMachine : public Machine
{
public:
    // more specific states related to SpecificMachine
    enum SpecificMachineState {
        SpecificMachineState1,
        SpecificMachineState2,
        SpecificMachineState3
    };
    SpecificMachine();
    virtual enum State state() const;
    virtual enum MachineState machineState() const;
    virtual enum SpecificMachineState specificMachineState() const;
    // ..
};

客户端代码应该能够处理3个抽象级别,但是,为了获取我需要调用的任何SpecificMachine的状态,

state()
machineState()
specificMachineState()

如何在一次调用SpecificMachine的情况下使任何state()的状态?

AbstractMachine枚举中添加所有状态是可行的,但我不希望每次我们需要添加新的SpecificMachine时都要修改基类。

谢谢。

0 个答案:

没有答案