5

Cocoa 使用 typedef-ed 匿名枚举位域。

我正在使用 Objective-C++,无论好坏。在 .mm 文件中,我需要将 2 位(按位包含 OR)分配给这些枚举位域类型之一的类型的属性。libc++ 编译器不会拥有它,因为它不会将 int 类型的右值赋予该 typedef-ed 匿名枚举位域的属性。

我知道 C 和 C++ 之间存在枚举的大小差异。那么这种情况的解决方法是什么?

我执行任务的线路类似于:

    uiSwipeRightDownRecogniser.direction = Right | Down;

位域的定义类似于:

    typedef enum 
    {
        Right = 1 << 0,
        Left  = 1 << 1,
        Up    = 1 << 2,
        Down  = 1 << 3
    } UISwipeDirection;

错误是:

无法使用“int”类型的右值初始化“UISwipeDirection”类型的参数

这种分配适用于.m文件,但不适用于.mm

编译器是 Apple 的 LLVM 3.0(使用 libc++)。

4

1 回答 1

1

只需使用以下方式转换它static_cast

uiSwipeRightDownRecogniser.direction = static_cast<UISwipeDirection>(Right | Down);
于 2011-11-23T11:27:59.390 回答