c++ - 在 C++ 中向枚举添加 "all"选项的好的设计是什么?

标签 c++ c++11 design-patterns enums

我有一个枚举类如下:

enum class Age
{
    Eleven,
    Twelve,
    Thirteen
};

然后我有一个方法叫做 vector<Person> GetPeopleOfAge(Age age) .什么是好的设计,以便开发人员可以调用它并让人们拥有 11、12 和 13?我可以称它三次,这很糟糕,但我确实想提一下我考虑过它。我可以添加 All枚举并检查我的方法,但我不喜欢用 All 这样的枚举污染枚举的想法。只是为了让我的案子奏效。我知道这是解决这个问题的常用方法,有些人可能不同意我的看法,但对我来说感觉很老套,我正在寻找替代方法。也许我应该使用枚举以外的东西?

最佳答案

无论 All 是在 enum 中显式捕获还是由另一种机制隐式捕获,您都必须处理抽象。鉴于此,我发现明确处理它更好。

您可以使用使用枚举值的既定方法,以便可以使用按位或运算符组合它们。

enum Age : unsigned int
{
   Eleven   = 000001,
   Twelve   = 000010,
   Thirteen = 000100,
   All      = 000111
};

然后,你可以使用

// Get all the people of age 11
auto ret1 = GetPeopleOfAge(Age::Eleven);

// Get people of all ages
auto ret2 = GetPeopleOfAge(Age::All);

// Get all the people aged 11 or 13
auto ret3 = GetPeopleOfAge(Age::Eleven | Age::Thirteen);

关于c++ - 在 C++ 中向枚举添加 "all"选项的好的设计是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48115205/

相关文章:

Java 提供的 Observable 不是一个好的实践

c++ - Unordered.map 插入问题与对键

c++ - C++11 中 lambda 的内存管理

c++ - 如何创建可变参数模板字符串格式化程序

c# - 这个图案的名字? (回答 : lazy initialization with double-checked locking)

javascript - 模块模式和闭包讨论

c++ - VS2010 可以显示哪个头文件拉入声明吗?

c++ - 提供小型嵌入式系统中抽象类的例子

c++ - 参数化运算符重载

c++ - 问题 : "error LNK2019: unresolved external symbol"