如何将枚举类用作一组标志?

比利·奥尼尔(Billy ONeal)

假设我有一组标志和一个类似这样的类:

/// <summary>Options controlling a search for files.</summary>
enum class FindFilesOptions : unsigned char
{
    LocalSearch = 0,
    RecursiveSearch = 1,
    IncludeDotDirectories = 2
};

class FindFiles : boost::noncopyable
{
    /* omitted */
public:
    FindFiles(std::wstring const& pattern, FindFilesOptions options);
    /* omitted */
}

并且我希望呼叫者能够选择多个选项:

FindFiles handle(Append(basicRootPath, L"*"),
    FindFilesOptions::RecursiveSearch | FindFilesOptions::IncludeDotDirectories);

是否可以使用C ++ 11以强类型的方式支持此功能enum class,还是我必须恢复为无类型的枚举?

(我知道调用方可以static_cast返回基础类型static_cast,但是我不希望调用方必须这样做)

迪特玛·库尔(DietmarKühl)

当然可以将enum classes用于位图。不幸的是,这样做有点麻烦:您需要在类型上定义必要的位操作。下面是一个示例。如果enum classes可以从某种其他类型派生而出,那将很好,它们可以存在于定义必要的运算符样板代码的合适名称空间中。

#include <iostream>
#include <type_traits>

enum class bitmap: unsigned char
{
    a = 0x01,
    b = 0x02,
    c = 0x04
};

bitmap operator& (bitmap x, bitmap y)
{
    typedef std::underlying_type<bitmap>::type uchar;
    return bitmap(uchar(x) & uchar(y));
}

bitmap operator| (bitmap x, bitmap y)
{
    typedef std::underlying_type<bitmap>::type uchar;
    return bitmap(uchar(x) | uchar(y));
}

bitmap operator^ (bitmap x, bitmap y)
{
    typedef std::underlying_type<bitmap>::type uchar;
    return bitmap(uchar(x) ^ uchar(y));
}

bool test(bitmap x)
{
    return std::underlying_type<bitmap>::type(x);
}

int main()
{
    bitmap v = bitmap::a | bitmap::b;
    if (test(v & bitmap::a)) {
        std::cout << "a ";
    }
    if (test(v & bitmap::b)) {
        std::cout << "b ";
    }
    if (test(v & bitmap::c)) {
        std::cout << "c ";
    }
    std::cout << '\n';
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将枚举类值用作for循环的一部分?

来自分类Dev

JavaScript:如何将单个全局对象传递给一组类?

来自分类Dev

如何将所选对象从一组对象推入一组对象

来自分类Dev

如何将一组Azure网站分配给一组特定实例?

来自分类Dev

如何将一组与一组完全匹配

来自分类Dev

如何将标签与一组单选按钮关联?

来自分类Dev

如何将一组经度放入Google地图

来自分类Dev

如何将一组字段写入JSON?

来自分类Dev

如何将一组左对齐的段落居中?

来自分类Dev

如何将一组经度放入Google地图

来自分类Dev

如何将一组相关步骤分为几组

来自分类Dev

如何将一组坐标转换为Char?

来自分类Dev

如何将一组广泛的样式仅应用于一个类/ ID?

来自分类Dev

如何将一组类从jar库映射到jpa实体以创建数据库表

来自分类Dev

如何将一组类从jar库映射到jpa实体以创建数据库表

来自分类Dev

如何将一组值与组1相匹配

来自分类Dev

MongoDB:如何将数组的字段用作互斥标志

来自分类Dev

如何序列化一组枚举?

来自分类Dev

如何序列化一组枚举?

来自分类Dev

如何将WndProc用作类函数

来自分类Dev

如何将一个形状分解为一组基本形状?

来自分类Dev

春季如何将一个豆子注入一组豆子中?

来自分类Dev

聚合物-如何将事件一次绑定到一组按钮

来自分类Dev

如何将一个数组中的一组数字相加?

来自分类Dev

如何将熊猫数据框的值除以第一行的每一组?

来自分类Dev

mvvmcross:如何将枚举值用作ItemsSource

来自分类Dev

Azure ARM VNET:如何将RDP访问限制为一组特定的IP

来自分类Dev

如何将配置应用于一组基于属性的测试?

来自分类Dev

如何将变化的数据源绑定到一组SVG?

Related 相关文章

热门标签

归档