c++ - 将 __bridge cast 与 static_cast 结合使用的语法是什么?

标签 c++ casting automatic-ref-counting llvm objective-c++

我在下面试过,但编译器不理解:

//Foo.mm
id anObjOfTypeFoo;
Foo* obj = (Foo*) anObjOfTypeFoo; //ERROR: must use __bridge

Foo* obj = (__bridge Foo*) anObjOfTypeFoo; //OKAY

Foo* obj = static_cast<__bridge Foo*> (anObjOfTypeFoo); //ERROR

Foo* obj = __bridge (static_cast<Foo*> (anObjOfTypeFoo)); //ERROR

由于 Objective-C 代码是由 C++ 编译器针对 .mm 编译单元有效编译的,因此桥接 C++ 的强制转换确实没有问题。有人可以阐明这一点吗?

最佳答案

太糟糕了,static_cast 来自 C++,它不理解 Objective-C 类。您甚至不能从 NSString 转换为 NSMutableString

关于c++ - 将 __bridge cast 与 static_cast 结合使用的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21842493/

相关文章:

java - 扩展 File 类时出现 ClassCastException 问题

c# - 类型转换明确布局的结构

ios - 将参数传递给实例方法以避免保留循环?

iphone - 已弃用发布方法

javascript - Autohotkey,从 C++ 或 JavaScript 或 C# 类中获取值

c++ - 将非托管 C++ 代码从 32 位转换为 64 位

c# - 嵌套接口(interface) : Cast IDictionary<TKey, IList<TValue>> 到 IDictionary<TKey, IEnumerable<TValue>>?

c++ - 指针丢失对前一个节点 C++ 的引用

c++ - Assimp 错误地导入了 OBJ 索引?

objective-c - 如何使用 ARC 在 NSArray 中存储 CFUUIDRef 对象?