将枚举类传播到更高级别的类

时间:2015-05-17 15:42:33

标签: c++ oop c++11 enums class-design

这是一个相当基本的问题,但我想对最佳做法有所了解。我的问题是如何将枚举从子类传播到更高级别的类,以便主类的调用者可以看到它?

例如,假设我有一个类自行车。 Bike将初始化构成自行车的子类Wheel,Frame,Chain等。 Frame可能有一个枚举,如FrameColor,Chain可能有一个枚举,如LinkType等。现在让我们说一些更高级别的代码想构建一个Bike类。 Bike的构造函数需要调用者指定LinkType,FrameColor等。我希望避免将枚举定义放在全局头文件中,因为这是糟糕的C ++风格。

我想到的两种可能的方法,但必须有一种更简单,更清洁的方式:

  • 使用定义接口的抽象类

  • 转发声明枚举

1 个答案:

答案 0 :(得分:4)

为什么你需要传播任何东西?就像您的子对象的枚举清晰一样,您可以直接使用它们。获得Frame::Color后,您无需制作Bike::Frame::Color ......就足够了。例如:

struct Frame {
    enum class Color {
        BLACK, RED
    };

    Color c;
};

struct Bike {
    Bike(Frame::Color c /*, Chain::LinkType lt, ..., */)
        : frame{c}
    { }

    Frame frame;
};

int main() {
    Bike b{Frame::Color::RED};
}

现在,如果Frame嵌套在Bike内,您可以为枚举添加别名:

struct Bike {
    struct Frame {
        enum class Color { ... };
    };

    using FrameColor = Frame::Color;
};

Bike b{Bike::FrameColor::RED};