在 C++使用 iOS 本机库公开的 C 位掩码(匿名枚举)

发布于 2024-12-17 10:47:47 字数 695 浏览 1 评论 0原文

Cocoa 使用类型定义的匿名枚举位域。

我正在使用 Objective-C++,以获得更好的效果。更糟。在 .mm 文件内,我需要将 2 位(按位或)分配给这些枚举位字段类型之一的类型的属性。 libc++ 编译器不会拥有它,因为它不会将 int 类型的右值赋予该 typedef 匿名枚举位字段的属性。

我知道 C 和 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++)。

Cocoa utilises typedef-ed anonymous enum bitfields.

I'm using objective-C++, for better & worse. Inside a .mm file I need to assign 2 bits (bitwise inclusive OR) to a property of the type of one of these enum bitfield types. The libc++ compiler won't have it because it won't give an rvalue of type int to a property of that typedef-ed anonymous enum bitfield.

I understand there is a size difference of enums between C & C++. So what is the work-around for this situation?

My line performing the assignment is akin to:

    uiSwipeRightDownRecogniser.direction = Right | Down;

The definition of the bitfield is akin to:

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

The error is:

Cannot initialize a parameter of type 'UISwipeDirection' with an rvalue of type 'int'

That kind of assignment works in a .m file, but not a .mm.

The compiler is Apple's LLVM 3.0 (using libc++).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猫烠⑼条掵仅有一顆心 2024-12-24 10:47:47

只需使用 static_cast 进行转换即可:

uiSwipeRightDownRecogniser.direction = static_cast<UISwipeDirection>(Right | Down);

Just convert it using static_cast:

uiSwipeRightDownRecogniser.direction = static_cast<UISwipeDirection>(Right | Down);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文