这是一个相当基本的问题,但我想要一些关于最佳实践的意见。我的问题是如何将枚举从子类传播到更高级别的类,以便主类的调用者可以看到它?
例如,假设我有一个自行车类。 Bike 将初始化构成自行车的子类 Wheel、Frame、Chain 等。 Frame 可能有一个枚举,例如 FrameColor,Chain 可能有一个枚举,例如 LinkType 等。现在假设一些更高级别的代码想要构造一个 Bike 类。 Bike 的构造函数要求调用者指定 LinkType、FrameColor 等。我想避免将枚举定义放在全局头文件中,因为这是不好的 C++ 风格。
我想到了两种可能的方法,但必须有一种更简单、更干净的方法:
使用抽象类定义接口(interface)
转发声明枚举
最佳答案
为什么你需要传播任何东西?就像你的子对象有明确的枚举一样,你可以直接使用它们。一旦有了 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};
关于c++ - 将枚举类传播到更高级别的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288743/