使用枚举类型进行用户界面功能是一个好主意吗?

时间:2012-05-23 11:42:56

标签: c++ c++11

假设我正在构建一个在屏幕上打印一些文本的简单类,它可以更改文本的颜色。

myclass a("this is the text");
a.setColor("green");

我还在学习C ++,最近我被介绍到enum并且认为我会试一试。我想知道在enum之类的接口函数中使用setColor类型是否是一个好习惯?

在接口函数中使用enum类有哪些优缺点?是否存在更适用的情况,以及是否存在使用不良的情况?

如果我想要合并属性怎么办? E.g。

a.setAttribute("bold reverse");

我不知道 interface 是否是我想要描述的内容的正确术语:我的班级用户最终会使用的函数。

3 个答案:

答案 0 :(得分:8)

在您的情况下,(至少)有两个优点:

  • 无需在运行时解析字符串,从而提高效率。您可以直接在switch语句中使用枚举变量。
  • 枚举(在某种程度上)是自我记录的,代码的用户必须努力提供无效的值。

一个潜在的“缺点”是在颜色串来自例如运行时userinput(他们输入文本框或其他东西)。您将需要解析此字符串并将其转换为枚举。但这并不是一个缺点,因为无论如何你都需要这样做。最佳做法是让用户界面逻辑验证字符串并尽早转换为枚举。

  

如果我想要合并属性怎么办?

我至少可以考虑三种选择:

  • 使用多次调用setAttribute
  • 传递一系列属性。
  • 将每个枚举值定义为2的幂,然后您可以将枚举与|结合使用。

答案 1 :(得分:3)

是的,在这种情况下使用enum似乎比实际字符串更好。

一个明显的优势 - 强力打字。

如果setColor接受char*,就像您的情况一样,您可以这样做:

 a.setColor("horse");

,您只能在运行时检测为错误。

如果setColoreColors为参数:

 a.setColor(eGreen);
 a.setColor(eRed);

会编译,但

 a.setColor(eHorse);

不会。

答案 2 :(得分:0)

对于这种情况,枚举肯定比字符串更明确。至于值的连接,你可以使用一些小小的功能来完成这项工作。将枚举值设置为增加2的幂,然后可以将它们组合在一起。

enum TextAttributes {
    Bold = 1,
    Italic = 2,
    Reverse = 4,
    StrikeThrough = 8,
    Underline = 16
};

TextAttributes attr = Bold | Reverse;