2014-02-18 23 views
1

我试过以下,但编译器不理解:,它应该不会有问题,桥的铸件将__bridge与static_cast结合使用的语法是什么?

//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++。请有人可以阐明这一点吗?

+0

好吧,__bridge在Objective-C指针和Core Foundation对象之间提供了一个强制转换。为什么你需要一个static_cast? – Alejandro

+1

我的核心逻辑是用C++编写的,我只是在iOS客户端上放置一个UI代码。和static_cast比普通的C风格更受青睐,原因很多,突出的是它的安全性。 [http://stackoverflow.com/questions/103512/in-c-why-use-static-castintx-instead-of-intx] – Viren

+0

请纠正我,如果我错了,但我不认为你可以static_cast一个核心使用简单的static_cast将基础对象映射到Objective C对象。它曾经是这样的(好吧,它曾经是一个普通的C风格演员),但新的ARC政策强制执行__bridge。 – Alejandro

回答

3

太糟糕的static_cast来自C++,它不理解Objective-C类。你甚至不能从NSString投到NSMutableString

相关问题