这是一个相当基本的问题,但我想对最佳做法有所了解。我的问题是如何将枚举从子类传播到更高级别的类,以便主类的调用者可以看到它?
例如,假设我有一个类自行车。 Bike将初始化构成自行车的子类Wheel,Frame,Chain等。 Frame可能有一个枚举,如FrameColor,Chain可能有一个枚举,如LinkType等。现在让我们说一些更高级别的代码想构建一个Bike类。 Bike的构造函数需要调用者指定LinkType,FrameColor等。我希望避免将枚举定义放在全局头文件中,因为这是糟糕的C ++风格。
我想到的两种可能的方法,但必须有一种更简单,更清洁的方式:
使用定义接口的抽象类
转发声明枚举
答案 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};