在 C++使用 iOS 本机库公开的 C 位掩码(匿名枚举)
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只需使用
static_cast
进行转换即可:Just convert it using
static_cast
: